我的代码:
parent(pamela, bob).
parent(tom, bob).
parent(tom, liz).
parent(bob, ann).
parent(bob, patricia).
parent(patricia, jim).
ancestor(X, Y) :- parent(X, Y); ancestor(X, Z), parent(Z, Y).
% Кому Памела является предком?
query1(X) :- ancestor(pamela, X), write(X), nl, fail.
要求:
query1(X).
给出错误消息:
ERROR: Out of local stack
bob
ann
patricia
jim
在在线翻译器中推出(链接)。
我做错了什么?
简而言之,你有一个无限递归“X 是 Y 的祖先,如果 X 是 Z 的祖先,如果 Z 是 Z1 的祖先,如果 Z1 是 Z2 的祖先,等等。”
这是通过将递归移动到句子的尾部来处理的: