如何修改以下Prolog程序

如何修改以下Prolog程序,prolog,Prolog,我编写了以下程序来计算列表中的所有成员对。这是我的密码: select_pair(X, Y, [X|[Y|T]], T). select_pair(X, Y, [Head|[X|[Y|T]]], [Head|Rest]) :- select_pair(X, Y, T, Rest). 我应该只使用此三人列表调用我的代码: select pair(X, Y, [1,2,3], Zs). 但这并不能生成所有可能的组合。它只会产生 X = 1, Y = 2, Zs = [3] 它应该产生这个,但它

我编写了以下程序来计算列表中的所有成员对。这是我的密码:

select_pair(X, Y, [X|[Y|T]], T).
select_pair(X, Y, [Head|[X|[Y|T]]], [Head|Rest]) :- select_pair(X, Y, T, Rest).
我应该只使用此三人列表调用我的代码:

select pair(X, Y, [1,2,3], Zs).
但这并不能生成所有可能的组合。它只会产生

X = 1, Y = 2, Zs = [3]
它应该产生这个,但它没有:

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]

那么,如何修改此代码以生成列表[1,2,3]中所有可能的成员对?

我将使用过程
select/3

select_pair(X, Y, List, Rest):-
  select(X, List, MList),
  select(Y, MList, Rest).
第一次选择会将列表中的第一个元素删除到X中,并将列表的其余部分放入MList中


然后第二次选择将获得第二个元素和其他元素。

非常好。别管我的上一个。评论。我刚刚看到您如何修改select/3。工作起来很有魅力。谢谢