2

嗨,我有这个问题,我无法解决。我是 Prolog 菜鸟,我看过很多这样的家谱示例,但似乎没有一个能解决我的问题。

说我有

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

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

我调用其中一个,它会在条件之间来回切换,因为每个条件都会满足之前的条件,因此导致本地堆栈错误。

大多数人似乎建议删除其中一个定义,但我需要回答父子查询。请帮忙,这看起来很简单,但我就是想不通。循环一次后如何中断?

TIA

4

1 回答 1

2

你可以:

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)(或实现它;不是c的好主意)

于 2012-06-29T18:59:23.760 回答