【问题标题】:preventing infinite loops prolog防止无限循环序言
【发布时间】:2013-05-02 08:38:01
【问题描述】:

我遇到了以下问题:
定义了以下事实和谓词:

father(avr, yit).
male(avr).
married(avr, sara).
father(yit, yaak).
married(rivka, yit).
father(yaak, yosef).
mother(rachel, yosef).
father(yaak, levi).
mother(leaa, levi).
mother(zilpa, gad).
father(yaak, dan).
mother(bilhaa, dan).
father(yosef, menashe).
father(yosef, ephraim).

are_married(X,Y) :- married(X,Y).
are_married(X,Y) :- married(Y,X).

我定义了以下谓词:

married(X,Y) :- mother(X,Z) , father(Y,Z).
mother(X) :- are_married(X,Y) , father(Y,_).

现在的问题是,妈妈是由婚姻来定义的,而婚姻是由做妈妈来定义的——结果是死循环,程序崩溃了。
如何防止无限循环?有没有办法告诉谓词不要使用不同的谓词?

【问题讨论】:

标签: recursion prolog infinite-loop


【解决方案1】:

为什么要重写妈妈?

直接跳过

mother(X) :- are_married(X,Y) , father(Y,_).

因为您已经有一个(数据定义)作为母亲。

【讨论】:

    猜你喜欢
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-25
    • 1970-01-01
    • 2021-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多