我试图让我所有的C在同一个列表中,
像:
?- channels(C,3).
C = [[1, 2], [1, 3], [2, 3]] ;
但我得到的是:
?- channels(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).
请帮帮我
答案 0 :(得分:0)
查看所需的输出和实际输出,看起来您希望收集combination(2, L)
的所有解决方案,其中L范围从 1 到 N :< / p>
因此,您可以使用findall/3
来实现这一目标:
channels(LC,N):-
findall(C,
(range(1,N,L),
combination(2,L,C)
), LC).