Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Prolog列表组合_Prolog - Fatal编程技术网

Prolog列表组合

Prolog列表组合,prolog,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] 到目前为止,我能够正常运行第三行,但无法获得其余的输出。我的代码是: se

我正在尝试编写一个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).

换句话说,您想要实现的是:

  • 从输入列表中选取任意X
  • 从输入列表中选取与X不同的Y
  • X和Y以外的元素以Zs表示
这很容易转化为prolog谓词:

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

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

您能显示应该生成给定输出的示例输入吗?我不太明白你所说的“返回每个元素的所有对”是什么意思。这里有一个:select_pair(X,Y,[1,2,3],Zs)。X=3,Y=2,Zs=[3]示例输出是打字错误吗?这没有道理。