首页 > 解决方案 > 一旦返回所需的值,如何停止序言中的递归?

问题描述

我正在咨询的 .pl 文件看起来像这样

spouse(eddard_stark,catelyn_stark).
spouse(X,Y):-spouse(Y,X).

我在这里根本想要的程序是,如果“Eddard 是 Catelyn 的配偶”,那么“Catelyn 是 Eddard 的配偶”。

但是当我查询时,spouse(eddard_stark, X).这会进入catelyn_stark. 一旦达到所需的输出,我不确定如何停止 Prolog 中的递归。

另外,如果您想到此问题的任何替代解决方案,请提及,我非常感谢您的意见。

标签: recursionprolog

解决方案


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

spouse_data(eddard_stark,catelyn_stark).

然后是一个spouse/2试图从两个方向调用谓词的谓词:

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

推荐阅读