列表中元素的序言列表

Prolog list of elements within a list

我正在尝试将所有 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).

请帮帮我

看你想要的输出和你的实际输出,看起来你想要收集 combination(2, L) 的所有解决方案,L 范围从 1 N:

因此,您可以使用 findall/3 来完成:

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