我想要计算在Prolog中K
元素的排列,其中元素的总和等于给定的S
。所以,我知道可以通过找到组合来计算排列,然后对它们进行排列。我知道如何计算K
要素的组合,是这样的:序言:k元素与元素总和的排列S
comb([E|_], 1, [E]).
comb([_|T], K, R) :-
comb(T, K, R).
comb([H|T], K, [H|R]) :-
K > 1,
K1 is K-1,
comb(T, K1, R).
名单的排列,具有它们的元素的总和等于给定S上的财产,我知道计算是这样的:
insert(E, L, [E|L]).
insert(E, [H|T], [H|R]) :-
insert(E, T, R).
perm([], []).
perm([H|T], P) :-
perm(T, R),
insert(H, R, P).
sumList([], 0).
sumList([H], H) :-
number(H).
sumList([H|Tail], R1) :-
sumList(Tail, R),
R1 is R+H.
perms(L, S, R) :-
perm(L, R),
sumList(R, S1),
S = S1.
allPerms(L, LP) :-
findall(R, perms(L,R), LP).
的问题是,我不知道如何将它们结合起来,以获得K
元素的安排,有等于给定S
元素的总和。任何帮助,将不胜感激。
你正在使用* any *数字,还是只使用整数? – repeat
只限于整数 – Nelly
您使用哪种Prolog处理器? SICStus? SWI? – repeat