嗨,我有一个我不能解决的问题。我是一个Prolog新手,我已经看过一大堆这样的家谱示例,但似乎没有一个能解决我的问题。
假设我有
son(X, Y) :-
\+daughter(X, Y),
father(Y, X).
father(Y, X) :-
male(X),
son(X, Y).我调用了其中的一个,它会在条件之间来回移动,因为每个条件都会满足前面的条件,因此会导致局部堆栈错误。
大多数人似乎建议删除其中一个定义,但我需要回答父子问题。求求你,帮帮忙,这看起来很简单,但我就是想不通。如何在循环一次后中断?
提亚
发布于 2012-06-30 02:59:24
您可以:
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).
....(无son/2条目)
2)使用支持tabling的prolog版本(例如XSB) (或者实现它;在ofc上不是一个好主意)
https://stackoverflow.com/questions/11265143
复制相似问题