Prolog 不间断循环

Prolog 不间断循环,prolog,infinite-loop,Prolog,Infinite Loop,嗨,我有一个我无法解决的问题。 我是一名Prolog新手,我见过很多家谱的例子,但似乎没有一个能解决我的问题 说我有 son(X, Y) :- \+daughter(X, Y), father(Y, X). father(Y, X) :- male(X), son(X, Y). 我调用其中一个,它会在两个条件之间来回移动,因为每个条件都会满足之前的条件,因此会导致局部堆栈错误 大多数人似乎建议删除其中一个定义,但我需要回答父子的问题。请帮帮我,这看起来很简单,但我就是

嗨,我有一个我无法解决的问题。 我是一名Prolog新手,我见过很多家谱的例子,但似乎没有一个能解决我的问题

说我有

son(X, Y) :-
   \+daughter(X, Y),
   father(Y, X).

father(Y, X) :-
   male(X),
   son(X, Y).
我调用其中一个,它会在两个条件之间来回移动,因为每个条件都会满足之前的条件,因此会导致局部堆栈错误

大多数人似乎建议删除其中一个定义,但我需要回答父子的问题。请帮帮我,这看起来很简单,但我就是想不出来。循环一次后,我如何打破

TIA

您可以:

1) 您可以使用包装谓词:

father(Y,X):-
   male(X),
   son_data(X,Y).

son(X,Y):-
   son_data(X,Y).
son(X,Y):-
   \+daughter(X, Y), 
    father(Y, X).
您的数据库应该如下所示

son_data(mike,steph).
....
father(nick,john).
....
(无子/2个条目)

2) 使用支持的prolog版本(如XSB)(或实现它;这不是一个好主意)