algumas_notas_suplementares.md
This commit is contained in:
parent
387ce1a3d0
commit
aadcc71ca4
53
algumas_notas_suplementares.md
Normal file
53
algumas_notas_suplementares.md
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
# O que é isto?
|
||||||
|
Este documento pretende tornar mais claro o funcionamento do polymani.pl. Para
|
||||||
|
isso explicamos brevemente a estrutura e o funcionamento de alguns predicados mais
|
||||||
|
que de outro modo poderiam parecer "abstratas".
|
||||||
|
|
||||||
|
## Estrutura
|
||||||
|
### Frontend
|
||||||
|
O frontend tem todos os predicados usados para interação conforme especificado
|
||||||
|
no assignment1.pdf.
|
||||||
|
|
||||||
|
Por outro lado, para que uma melhor experiência de utilização fosse possível, tomamos a liberdade de implementar dois predicados auxiliares que, para inputs inválidos, disponibilizam uma explicação mais amigável do erro.
|
||||||
|
|
||||||
|
### Backend
|
||||||
|
Abaixo descrevem-se alguns predicados selecionados com vista a tornar a
|
||||||
|
compreensão dos mesmos mais rápida e simples. Em alguns casos o objectivo foi
|
||||||
|
destacar algumas particularidades que podem não ser evidentes numa primeira
|
||||||
|
leitura.
|
||||||
|
|
||||||
|
#### power
|
||||||
|
As comparações CLPFD permitiram-nos comparar se uma determinada variavel
|
||||||
|
pertencia um determinado domínio sem para isso termos de sacrificar a
|
||||||
|
reversibilidade das variáveis. CLPFD stands for Constraint Logic Programming
|
||||||
|
over Finite Domains.
|
||||||
|
|
||||||
|
#### term
|
||||||
|
Um termo é uma sequência de monómios sem adições.
|
||||||
|
Este é um elemento fundamental deste programa tendo sido extensivamente testado.
|
||||||
|
|
||||||
|
O primeiro predicado valida números reais definidos.
|
||||||
|
|
||||||
|
O segundo predicado valida números indefinidos com a CLPR. A verificação de que
|
||||||
|
N não é um compound é necessária para assegurar que N não é uma potencia (estas
|
||||||
|
sao tratadas pelo terceiro e quarto predicado).
|
||||||
|
|
||||||
|
O quinto predicado faz chamadas recursivas para validar uma multiplicação de
|
||||||
|
monómios.
|
||||||
|
|
||||||
|
#### simplify_term
|
||||||
|
Começamos por convert um termo numa list de monómios.
|
||||||
|
|
||||||
|
Ordenamos os monómios do por ordem crescente (isto é, de menor grau para maior
|
||||||
|
grau).
|
||||||
|
|
||||||
|
Se existir um zero na lista (um dos monómios é zero), sabemos que a qualquer
|
||||||
|
coisa a múltiplicar por zero (recorde-se a definição de termo) é zero. Assim
|
||||||
|
unificamos Term_Out com zero e terminamos a rotina com um green cut.
|
||||||
|
|
||||||
|
Se não,
|
||||||
|
se existir apenas um elemento na lista, esta já se encontra simplificada;
|
||||||
|
se não, aplicamos as seguintes regras de simplificação:
|
||||||
|
eliminar todos os monómios que têm a constante 1
|
||||||
|
juntar monómios semelhantes (com a mesma variável)
|
||||||
|
|
Reference in New Issue
Block a user