From Bratko's book, Prolog Programming for Artificial Intelligence (4th Edition) We have the following code which doesn't work -
anc4(X,Z):-
anc4(X,Y),
parent(Y,Z).
anc4(X,Z):-
parent(X,Z).
In the book, on page 55, figure 2.15, is shown that parent(Y,Z)
is kept calling until stack is out of memory.
What I don't understand is that prolog does a recursiv call to anc4(X,Y), and not to parent (Y,Z) first. Why doesn't prolog goes over and over to the first line, anc4(X,Y)
, and rather goes to the second line?
Can you please elaborate why is the line parent(Y,Z)
is kept being called?
Thank you.
anc4(X, Z) :- anc4(X, Y), ...
right there. Prolog will keep selecting the first clause until it fails or succeeds. It does neither. It just keeps callinganc4/2
again. – lurker