Aula 15
Prolog
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).