Aula 15

Prolog

prolog interativo online

1 Construindo estruturas em tempo de execução

Estru =.. Lista

X =.. [a,2,c,5].

X = a(2,c,5)

2 Asserta

pai(a,b).
pai(a,c).

?- asserta(pai(a,z)).
?- pai(A,z).

asserta(y) coloca y (uma estrutura) como o primeiro fato.

retract(y) remove o fato.

3 findall

pai(a,b).
pai(a,c).
pai(b,d).

?- findall(X,pai(a,X),Lista)

findall(Variable, query, Lista com os resultados).

Variable pode ser qualquer estrutura

Lista = [] se nao houver solução

4 Call

call(estrutura)

estrutura passa a ser o objetivo (construida em tempo de execução).

5 predicados com predicados como argumentos

  • filtra(Listain, Pred, Listaout) ++- so os elementos de Listain que satisfazem o Pred estão em Listaout
filtra([],_,[]).
filtra([X|R],P,[X|Z]) :- PP =..[P,X],call(PP),!, filtra(R,P,Z).
filtra([_|R],P,Z) :- filtra(R,P,Z).

pos(X) :- X>0.
?- filtra([1,-2,3,-4,-5],pos,Z).
  • map(Pred,L1,L2) mapeia Pred em L1 e L2
map(_,[],[]).
map(P,[X1|R1],[X2|R2]) :- PP =.. [P,X1,X2],
                   call(PP), map(P,R1,R2).

aux(A,B) :- B is A+1.
?- map(aux,[1,2,3],Z).

6 Sort e a ordem total @<

sort([10,2,[3,4],pai(3,4),pai(5,2),[5],aro,abobora,99,[]],L).

Author: Jacques Wainer

Created: 2018-04-16 Mon 15:16

Validate