我编写了以下程序来计算列表中的所有成员对。这是我的代码:
select_pair(X, Y, [X|[Y|T]], T).
select_pair(X, Y, [Head|[X|[Y|T]]], [Head|Rest]) :- select_pair(X, Y, T, Rest).
我应该只用这个3人名单来调用我的代码:
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]中所有可能的成员对?
答案 0 :(得分:2)
我使用过程select/3
:
select_pair(X, Y, List, Rest):-
select(X, List, MList),
select(Y, MList, Rest).
第一个选择会将List中的第一个元素移到X中,并将列表的其余部分放在MList中。
然后第二个选择会得到第二个元素和Rest。