algumas_notas_suplementares.md

This commit is contained in:
Diogo Cordeiro 2018-11-25 22:55:00 +00:00
parent 387ce1a3d0
commit aadcc71ca4

View 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)