2

我是 Prolog 的新手,我很难理解某些机制的实际工作原理。现在我正在尝试解决一个特定的问题。

我需要从一个列表中找到所有可能的对,所以我试图定义规则 select_pairs(X,Y,_,Z)。

以下是我在运行给定查询时希望看到的内容。

查询:select_pairs(X,Y,[1,2,3],Z)。返回以下内容:

X = 1, Y = 2, Zs = [3] ;
X = 1, Y = 3, Zs = [2] ;
X = 2, Y = 1, Zs = [3] ;
X = 2, Y = 3, Zs = [1] ;
X = 3, Y = 1, Zs = [2] ;
X = 3, Y = 2, Zs = [3]

AND 查询 select_pairs(1,2,Xs,[3])。返回以下内容:

Xs = [1, 2, 3] ;
Xs = [2, 1, 3] ;
Xs = [1, 3, 2] ;
Xs = [2, 3, 1] ;
Xs = [3, 1, 2] ;
Xs = [3, 2, 1] ;

截至目前,我只能从第一个查询中获得第一个结果来显示,仅此而已。我解决这个问题的最佳方法是什么?谢谢!

4

1 回答 1

2

你的 Prolog 应该带有select /3,这是一个内置函数,它的功能与它的名字所暗示的完全一样:

?- select(X,[1,2,3],R).
X = 1,
R = [2, 3] ;
X = 2,
R = [1, 3] ;
X = 3,
R = [1, 2] ;
false.

它也可以“向后”工作

?- select(1,R,[2,3]).
R = [1, 2, 3] ;
R = [2, 1, 3] ;
R = [2, 3, 1] ;
false.

然后,要获得一个有效的 select_pairs/4,您可以组合 2 个 select/3。

于 2013-04-16T05:49:56.580 回答