Prolog列表中的元素列表

时间:2015-10-26 19:45:09

标签: list prolog

我试图让我所有的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).

请帮帮我

1 个答案:

答案 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).