【发布时间】:2016-02-12 08:58:35
【问题描述】:
我正在尝试在 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).
问题是我不知道如何组合它们,以便获得K 元素的排列,使元素的总和等于给定的S。任何帮助将不胜感激。
【问题讨论】:
-
您是在使用 any 数字,还是仅使用整数?
-
您使用的是哪个 Prolog 处理器? SICStus? SWI?
标签: list prolog combinations permutation clpfd