List 列表中元素的序言列表
我想把我所有的C都列在同一张名单上 比如: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,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:我不知道这个问题是否对其他人有用。无论如何,我把前面的评论作为一个答案,因为它是你在哪里寻找。