padre(juanito, pepe). padre(pepe, luis). padre(luis, carlosI). ancestro(X,Y) :- padre(X,Y). ancestro(X,Z) :- padre(X,Y), ancestro(Y,Z). ?- ancestro(juanito, carlosI).
Probar con diferentes ordenes de las reglas y del cuerpo de la segunda regla.
Con todo tipo de pregunta:
1 2 :- A,B 2 :- A,B 1Solo si existe el ancestro
1 2 :- B,ALoop todo el tiempo
2 :- B,A 1
Problemas: hacer recursiones en donde se llama a sí mismo (sin
ningn cambio) de nuevo: e.g.,
casado(X,Y) :- casado(Y,X). padre(X,Y) :- hijo(Y,X). hijo(A,B) :- padre(B,A).
El orden óptimo varía con el uso, e.g.:
a) abuelo(X,Z) :- padre(X,Y), padre(Y,Z). vs. b) abuelo(X,Z) :- padre(Y,Z), padre(X,Y). a) si ?- abuelo(nombre,Var). b) si ?- abuelo(Var,Nombre).
Otros parecidos:
liga(a,b). liga(b,d). liga(a,c). liga(d,e). liga(c,d). liga(c,f). conecta(Nodo1,Nodo2) :- liga(Nodo1,Nodo2). conecta(Nodo1,Nodo2) :- liga(Nodo1,Nodo3), conecta(Nodo3,Nodo2). sucesor(1,2). sucesor(2,3). sucesor(3,4). ... menor(Num1,Num2) :- sucesor(Num1,Num2). menor(Num1,Num2) :- sucesor(Num1,Num3), menor(Num3,Num2).