Prolog 无限循环:双向谓词
Prolog Infinite Loop: Bi-Directional Predicates
我正在使用 https://swish.swi-prolog.org/ 作为在线 Prolog 沙箱,但使用下面的简单代码,我试图定义一个双向语句来检查 2 个原子(我认为?)是否共享一个朋友,程序似乎陷入了无限循环。我做错了什么?
friends(lisa, jack).
friends(lisa, jane).
friends(X, Y) :- friends(Y, X).
mutual_friends(X, Y) :- friends(X, Z), friends(Y, Z).
当我查询 mututal_friends(jack, jane)
时出现无限循环。
关键是你的规则可以无限扩展。您应该定义一个 friend_
谓词来定义友谊,然后 friend(X, Y) :- friend_(X, Y) ; friend_(Y, X).
我正在使用 https://swish.swi-prolog.org/ 作为在线 Prolog 沙箱,但使用下面的简单代码,我试图定义一个双向语句来检查 2 个原子(我认为?)是否共享一个朋友,程序似乎陷入了无限循环。我做错了什么?
friends(lisa, jack).
friends(lisa, jane).
friends(X, Y) :- friends(Y, X).
mutual_friends(X, Y) :- friends(X, Z), friends(Y, Z).
当我查询 mututal_friends(jack, jane)
时出现无限循环。
关键是你的规则可以无限扩展。您应该定义一个 friend_
谓词来定义友谊,然后 friend(X, Y) :- friend_(X, Y) ; friend_(Y, X).