如何修改以下Prolog程序

时间:2014-12-02 13:53:03

标签: 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).

我应该只用这个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]中所有可能的成员对?

1 个答案:

答案 0 :(得分:2)

我使用过程select/3

select_pair(X, Y, List, Rest):-
  select(X, List, MList),
  select(Y, MList, Rest).

第一个选择会将List中的第一个元素移到X中,并将列表的其余部分放在MList中。

然后第二个选择会得到第二个元素和Rest。