如何在Prolog中创建一个使所有关系对称的规则?

mbl*_*itz 5 prolog

我想要的是我定义:

marriedTo(martin, annie).
Run Code Online (Sandbox Code Playgroud)

它还使以下成立:

marriedTo(annie, martin).
Run Code Online (Sandbox Code Playgroud)

我尝试了以下内容,但它(显然)是一个无限循环.

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

我怎么在Prolog中这样做?

Not*_*ser 9

解决它的最简单方法是:

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

然后还有很多其他的方法,实现和语义来解决无限递归的问题......


mbl*_*itz 1

我终于明白了:

marriedTo(X,Y) :- marriedTo(Y,Z), X = Z, !.
Run Code Online (Sandbox Code Playgroud)

  • 这不是一个通用的解决方案,因为例如最通用的查询“?-marryTo(X, Y).”现在最多只能产生一个解决方案。但肯定应该有几种解决方案! (2认同)