This repository has been archived on 2023-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
polynomialmani.pl/algumas_notas_suplementares.md

51 lines
2.3 KiB
Markdown
Raw Normal View History

2018-11-25 22:55:00 +00:00
# O que é isto?
Este documento pretende tornar mais claro o funcionamento do polymani.pl. Para
2018-11-25 22:59:03 +00:00
isso explicamos brevemente a estrutura e realçamos algumas particularidades de alguns predicados que de outro modo poderiam parecer "abstratos".
2018-11-25 22:55:00 +00:00
2018-11-25 22:59:03 +00:00
## Algumas palavras sobre a estrutura e o frontend
O polymani divide-se em frontend e backend. O backend tem todos os predicados usados para interação conforme especificado
2018-11-25 22:55:00 +00:00
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.
2018-11-25 22:59:03 +00:00
## Backend
2018-11-25 22:55:00 +00:00
Abaixo descrevem-se alguns predicados selecionados com vista a tornar a
2018-11-25 22:59:03 +00:00
compreensão dos mesmos mais rápida e simples destacando-se algumas particularidades que poderiam não ser evidentes numa primeira
2018-11-25 22:55:00 +00:00
leitura.
2018-11-25 22:59:03 +00:00
### power
2018-11-25 22:55:00 +00:00
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.
2018-11-25 22:59:03 +00:00
### term
2018-11-25 22:55:00 +00:00
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.
2018-11-25 22:59:03 +00:00
### simplify_term
2018-11-25 22:55:00 +00:00
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)