0

我不明白如何删除无限循环。试图找到祖先时。

spouse(george,mel).
spouse(mel,george).
parent(george,elizabeth).
parent(george,margaret).
spouse(elizabeth,philip).
spouse(philip,elizabeth).
parent(elizabeth,charles).
parent(spencer,diana).
spouse(diana,charles).
spouse(charles,diana).

parent(X,Y):-spouse(X,Z),parent(Z,Y).
ancestor(X,Y):-parent(X,Y).
ancestor(X,Y):-parent(X,Z),ancestor(Z,Y).

由于第一条规则,Prolog 似乎陷入了无限循环。我真的很想避免像我必须为配偶(反身关系)那样对事实进行硬编码。但我似乎无法弄清楚这个问题与其他有关传递关系的问题有何相似之处。

4

0 回答 0