% pertence pertence(X,[X|_]). pertence(X,[Y|L]) :- pertence(X,L). % concat concat([],L,L). concat([H|L1],L2,[H|L3]) :- concat(L1,L2,L3). % last last(X,[X]). last(X,[_|L]) :- last(X,L). % rev rev([],[]). rev([H|L1],R) :- rev(L1,L2), concat(L2,[H],R). % tamanho tam([],0). tam([H|L1],N) :- tam(L1,N1), N is N1 + 1. % remove 1 elemento X remove([],X,[]). remove([X|L],X,L). remove([Y|L],X,[Y|L1]) :- remove(L,X,L1). % remove todos os elementos X remove([],X,[]). remove([X|L],X,L1) :- remove(X,L,L1). remove([Y|L],X,[Y|L1]) :- remove(L,X,L1). % Arvore Binaria lookup(K,arvbin(K,_,_,I),I). lookup(K,arvbin(K1,E,_,I1),I) :- K < K1, lookup(K,E,I). lookup(K,arvbin(K1,_,D,I1),I) :- K > K1, lookup(K,D,I). % Meta-interpretador Prolog para Prolog interp(true). interp((G1,G2)) :- interp(G1), interp(G2). interp((G1;G2)) :- interp(G1); interp(G2). interp(G) :- clause(G,B), interp(B).