我正在尝试在Prolog中计算K
个元素的排列,其中它们的元素之和等于给定的S
。因此,我知道可以通过找到组合然后对其进行排列来计算排列。我知道如何计算K
个元素的组合,类似于:
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).
问题在于我不知道如何将它们组合起来,以得到元素总和为给定的 S
的 K
个元素的排列。感谢任何帮助。