列表中元素的序言列表
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).
我正在尝试将所有 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).