我想要計算在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