Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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
List 列表中元素的序言列表_List_Prolog - Fatal编程技术网

List 列表中元素的序言列表

List 列表中元素的序言列表,list,prolog,List,Prolog,我想把我所有的C都列在同一张名单上 比如: ?-通道(C,3)。 C=[[1,2],[1,3],[2,3] 但我得到的是: ?-通道(C,3)。 C=[[1,2]]; C=[[1,3]]; C=[[2,3]] 我的代码是: channels([C],N) :- range(1,N,L), combination(2,L,C). range(I,I,[I]). range(I,K,[I|L]) :- I < K, I1 is I + 1, range(I1,K,L). combina

我想把我所有的C都列在同一张名单上

比如:

?-通道(C,3)。
C=[[1,2],[1,3],[2,3]

但我得到的是:

?-通道(C,3)。
C=[[1,2]];
C=[[1,3]];
C=[[2,3]]

我的代码是:

channels([C],N) :- range(1,N,L), combination(2,L,C).


range(I,I,[I]).
range(I,K,[I|L]) :- I < K, I1 is I + 1, range(I1,K,L).


combination(0,_,[]).
combination(K,L,[X|Xs]) :- K > 0,
   el(X,L,R), K1 is K-1, combination(K1,R,Xs).

el(X,[X|L],L).
el(X,[_|L],R) :- el(X,L,R).
通道([C],N):-范围(1,N,L),组合(2,L,C)。
范围(I,I,[I])。
范围(I,K,[I | L]):-I0,
el(X,L,R),K1是K-1,组合(K1,R,Xs)。
el(X,[X | L],L)。
el(X,L,R):-el(X,L,R)。

请帮助我查看您的期望输出和实际输出,您似乎希望收集L范围为1到N的所有
组合(2,L)

因此,您可以使用来完成以下任务:

channels(LC,N):- 
  findall(C, 
   (range(1,N,L), 
    combination(2,L,C)
   ), LC).

请更加努力地说明你想要什么。目前,所有的猜测都是为了寻找你想要的输出和你的实际输出,我猜应该是
通道(LC,N):-findall(C,(范围(1,N,L),组合(2,L,C)),LC)。
是的,很抱歉,你的解决方案奏效了,所以你应该理解它,但是非常感谢。@VHdk:我不知道这个问题是否对其他人有用。无论如何,我把前面的评论作为一个答案,因为它是你在哪里寻找。