3.Programa em Prolog
Fazendo uso das definições dos operadores e regras utilizados neste projeto, segue a descrição do programa, que foi
Implementado utilizando a ferramenta LPA.
Passo 1: Leitura da entrada:
Realizada através do predicado neg, cujo parâmetro deve ser a expressão que se deseja negar.
Ela é responsável por chamadas a predicados para realização de uma saída gráfica, e utiliza o predicado
negacao para emitir a resposta ao usuário.
Passo2. De acordo com a precedência dos operadores verificar qual clausula será executada sobre a entrada:
negacao(X => Y, W and Z):- !, simplifica(X,W), negacao(Y,Z).
negacao(X and Y,K or F):-!,negacao(X,K), negacao(Y,F).
negacao(X or Y, K and F):-!, negacao(X,K), negacao(Y,F).
negacao(X, Y):- simplifica(not X,Y).
O predicado negacao executa a negação dos termos recursivamente até que sejam apenas um único átomo
not (a) <=> not a .
Passo 3. Realizar a simplificação dos operandos caso estes se apresentem na forma not not x que é reduzido para x.
simplifica(not ( not X),Y):- !,simplifica(X,Y).
Passo3.1. Realizar a verificação da validade da entrada, reportando erro quando a sintaxe estiver errada ( não seguir o
padrão: operando operador operando, para operadores diferentes de not)
simplifica(X,X):- !, X\==not,X\== or, X\== and, X\== =>, X\== not not,
X\== not (and), X\== not (or), X\== not ( => ).
Passo 4. Emitir a resposta ao usuário.
Isso é realizado pelo procedimento create_resp_win chamado pelo predicado neg.
Ele reporta a saída estabelecida pelo predicado negação em uma janela gráfica.
(Veja o código do programa no Apêndice.)