我正在尝试制作一个prolog程序,该程序生成m个元素列表中n个元素的所有组合(重复),这些元素的总和在两个给定数字A
和B
之间。我设法制作排列程序,但我不知道我应该为rep_combinations
使用什么。
以下是排列程序:
chech(L,A,B):-
findall([X1,X2,X3,X4 ], (
member(X1, L),
member(X2, L),
member(X3, L),
member(X4, L),
Sum is X1+X2+X3+X4,
Sum > A,
Sum < B
), Solutions),
write(Solutions)
.
答案 0 :(得分:2)
您可以对项目(X1,X2,X3,X4)进行排序以形成组合,然后获得一组所述组合。 E.g:
chech2(L,A,B):-
setof(Combination, X1^X2^X3^X4^Sum^(
member(X1, L),
member(X2, L),
member(X3, L),
member(X4, L),
Sum is X1+X2+X3+X4,
Sum > A,
Sum < B,
msort([X1,X2,X3,X4 ], Combination)
), Solutions),
write(Solutions).
我刚刚更改了findall/3
使用的模板以获取排序的排列(使用msort/2
),并将findall/3
更改为setof/3
以删除重复项
请注意,打印结果而不是在程序中添加第四个参数来统一结果是很奇怪的(如果喜欢这样做,调用者可以打印它)。