如何在Prolog中修复此循环谓词?

8 prolog

为什么这不能在Prolog中定义"已婚"?

married(X,Y):-married(Y,X).
Run Code Online (Sandbox Code Playgroud)

这些循环谓词是不允许的?我该如何解决?

谢谢

ang*_*son 5

如果我的语法错误,请原谅我,自从我和Prolog一起玩了一段时间后.


一个典型的解决方案是在子句中引入另一个级别,如下所示:

married(X, Y) :- wife(X, Y).
married(X, Y) :- wife(Y, X).
Run Code Online (Sandbox Code Playgroud)

然后使用wife子句指定关系:

wife(jane, bob).
wife(alice, john).

?- married(jane, X).
X = bob
Run Code Online (Sandbox Code Playgroud)

更多信息可以在这里找到:CSc 8710,演绎数据库和逻辑编程,第6章 - 逻辑和数据库,6.5 - 特殊关系.