首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连续循环循环

连续循环循环
EN

Stack Overflow用户
提问于 2012-06-29 23:59:57
回答 1查看 111关注 0票数 2

嗨,我有一个我不能解决的问题。我是一个Prolog新手,我已经看过一大堆这样的家谱示例,但似乎没有一个能解决我的问题。

假设我有

代码语言:javascript
复制
son(X, Y) :-
   \+daughter(X, Y),
   father(Y, X).

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

我调用了其中的一个,它会在条件之间来回移动,因为每个条件都会满足前面的条件,因此会导致局部堆栈错误。

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

提亚

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-30 02:59:24

您可以:

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

代码语言:javascript
复制
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).

您的数据库应该如下所示

代码语言:javascript
复制
son_data(mike,steph).
....
father(nick,john).
....

(无son/2条目)

2)使用支持tabling的prolog版本(例如XSB) (或者实现它;在ofc上不是一个好主意)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11265143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档