Prolog 无限重复相同的答案
Prolog repeating the same answer infinitely
这些是我的事实:
married(man, widow).
married(father,daughter).
married(widow, man).
married(daughter,father).
parent(father, man).
parent(widow, daughter).
parent(man, bboy).
% here is the rule giving me problems,
parent(X,Y):-
married(Z,X),
parent(Z,Y).
当我 运行 parent(X,Y) 它 returns 同样的答案无限地如此
?- parent(X,Y).
X = father
Y = man ? ;
X = widow
Y = daughter ? ;
X = man
Y = bboy ? ;
X = widow
Y = bboy ? ;
X = widow
Y = daughter ? ;
X = widow
Y = bboy ? ;
X = widow
Y = daughter ? ;
如何阻止它重复,因为当另一个规则调用父规则时它会崩溃 prolog
你的问题在这里:
parent(X,Y):-
married(Z,X),
parent(Z,Y).
其实去掉married/2
:
可以看得更清楚一点
parent(X,Y):-
parent(Z,Y).
这将导致无限递归。简单的做法是重命名规则或事实:
parent(father, man).
parent(widow, daughter).
parent(man, bboy).
parent_of(X, Y) :-
married(Z, X),
parent(Z, Y).
不再递归。
这些是我的事实:
married(man, widow).
married(father,daughter).
married(widow, man).
married(daughter,father).
parent(father, man).
parent(widow, daughter).
parent(man, bboy).
% here is the rule giving me problems,
parent(X,Y):-
married(Z,X),
parent(Z,Y).
当我 运行 parent(X,Y) 它 returns 同样的答案无限地如此
?- parent(X,Y).
X = father
Y = man ? ;
X = widow
Y = daughter ? ;
X = man
Y = bboy ? ;
X = widow
Y = bboy ? ;
X = widow
Y = daughter ? ;
X = widow
Y = bboy ? ;
X = widow
Y = daughter ? ;
如何阻止它重复,因为当另一个规则调用父规则时它会崩溃 prolog
你的问题在这里:
parent(X,Y):-
married(Z,X),
parent(Z,Y).
其实去掉married/2
:
parent(X,Y):-
parent(Z,Y).
这将导致无限递归。简单的做法是重命名规则或事实:
parent(father, man).
parent(widow, daughter).
parent(man, bboy).
parent_of(X, Y) :-
married(Z, X),
parent(Z, Y).
不再递归。