Prolog列表组合

时间:2014-12-01 04:03:00

标签: prolog

我正在尝试编写一个prolog代码,它将获取一个列表并返回该列表中每个元素的所有对。例如:

   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_pair(X,Y,[X|Xs],Zs):- select(Y,Xs,Zs).
select_pair(X,Y,[H|Z1],[H|Z2]):- select_pair(X,Y,Z1,Z2).

1 个答案:

答案 0 :(得分:2)

用语言来说,你想要达到的目标是:

  • 从输入列表中取出任何X
  • 从输入列表中选择与X不同的Y
  • X和Y以外的元素是Zs

这很容易转化为序言谓词:

select_pair(X, Y, L, Zs) :-
    select(X, L, Xs),
    select(Y, Xs, Zs).

首先我们从输入L中选择X.从剩余的元素Xs中我们选择Y.此后,剩余的元素是Zs。