Prolog,Lists和Pairs的新成员

时间:2013-04-16 04:42:46

标签: list prolog

我是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]

和查询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] ;

截至目前,我只能从第一个查询中获得第一个结果,而不是更多。我最好的办法是什么?谢谢!

1 个答案:

答案 0 :(得分: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。