Código Fonte - Prolog

 

Código Fonte

 vinte_e_um(L,T,N):-aplica_negacao(L,L1),resto_operadores(L1,T,N).

 

 

%%% Negando os numeros da Lista %%%%

aplica_negacao([],[]).

aplica_negacao([X|Cauda],[Y|Cauda1]):-neg(X,Y),

aplica_negacao(Cauda,Cauda1).

 

neg(X,X).

neg(X,(-X)).

 

 

%%% Aplicando os operadores %%%%

resto_operadores(L1,T,N):-aplica_operadores(L1,L2),

L2=[T],

T1 is T,

T1==N.

 

aplica_operadores(L,L).

aplica_operadores([X,Y|Cauda],L2):-operadores(Y,X,E),

aplica_operadores([E|Cauda],L2).

 

%%% Fatos e regras com operadores %%%%

operadores(X,Y,(X+Y)).

operadores(X,Y,(X*Y)).

operadores(X,Y,(X/Y)):-Y=\=0.

operadores(X,Y,(Y/X)):-X=\=0.

 

Predicados - Considerações:

  • aplica_negacao / 2 = dada uma lista aplica-se a negação a cada número da lista através de um processo recurssivo.
  • neg / 2 = nega o número da lista instanciado pelo "aplica_negaçao".
  • resto_operadores / 3 = aplica as operações na lista gerada por "aplica_negação" (L2), instancia em "T" a lista gerada pelo "aplica_operadores" L2=[T], atribui a "T1" o valor resultante de "T" e faz a comparação de "T" com o resultado pré-estabelecido "N".
  • aplica_operadores / 2 = a partir da lista gerada pelo "aplica_negacao" irá combinar as operações de adição, multiplicação e divisão com os respectivos números que compõe a lista através de um processo recursivo. A operação de negação estabelece a subtração sob a forma de "+ ( - N )".
  • Operadores / 3 =compõe as bases de fatos e regra para as operações.