Recursion 一旦返回所需的值,如何在prolog中停止递归?

Recursion 一旦返回所需的值,如何在prolog中停止递归?,recursion,prolog,Recursion,Prolog,我正在查询的.pl文件如下所示 spouse(eddard_stark,catelyn_stark). spouse(X,Y):-spouse(Y,X). 我基本上想要的是,如果“Eddard是Catelyn的配偶”,那么“Catelyn是Eddard的配偶” 但是当我询问配偶时(eddard_stark,X)。这将进入catelyn_stark的无休止的递归返回。 我不知道一旦达到所需的输出,如何停止Prolog中的递归 此外,如果您想为这个问题找到其他解决方案,请提及,我非常感谢您的意见。

我正在查询的.pl文件如下所示

spouse(eddard_stark,catelyn_stark).
spouse(X,Y):-spouse(Y,X).
我基本上想要的是,如果“Eddard是Catelyn的配偶”,那么“Catelyn是Eddard的配偶”

但是当我询问配偶时(eddard_stark,X)。这将进入
catelyn_stark
的无休止的递归返回。 我不知道一旦达到所需的输出,如何停止Prolog中的递归


此外,如果您想为这个问题找到其他解决方案,请提及,我非常感谢您的意见。

它将不断地交换参数。您可以通过使用两个谓词来解决此问题,例如,一个
配偶数据/2
包含:

spouse_data(eddard_stark,catelyn_stark).
然后是一个谓词
配偶/2
,它试图从两个方向调用谓词:

spouse(X, Y) :-
    spouse_data(X, Y).
spouse(X, Y) :-
    spouse_data(Y, X).

太好了,这正是我想要的,也谢谢你的迅速回复。不要指定
配偶/2
是对称关系,而是将其分为两个谓词。这是一个很好的解决方案,它表明Prolog对于编程(用于构建某些证明)来说很强大,但是对于FOL中的建模来说却很弱。