List prolog中满足一定条件的重复组合
我试图制作一个prolog程序,从m个元素的列表中生成n个元素的所有组合(重复),这些元素的总和在两个给定的数字List prolog中满足一定条件的重复组合,list,prolog,combinations,combinatorics,List,Prolog,Combinations,Combinatorics,我试图制作一个prolog程序,从m个元素的列表中生成n个元素的所有组合(重复),这些元素的总和在两个给定的数字a和B之间。我设法制作了排列程序,但我不知道我应该用什么来组合rep\u 以下是排列程序: chech(L,A,B):- findall([X1,X2,X3,X4 ], ( member(X1, L), member(X2, L), member(X3, L), member(X4, L), Sum
a
和B
之间。我设法制作了排列程序,但我不知道我应该用什么来组合rep\u
以下是排列程序:
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)
.
chech(L,A,B):-
findall([X1,X2,X3,X4](
成员(X1,L),
成员(X2,L),
成员(X3,L),
成员(X4,L),
总和为X1+X2+X3+X4,
总和>A,
总和
您可以对项目(X1、X2、X3、X4)进行排序,形成一个组合,然后获得一组所述组合。例如:
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).
chech2(L,A,B):-
集合(组合,X1^X2^X3^X4^Sum^(
成员(X1,L),
成员(X2,L),
成员(X3,L),
成员(X4,L),
总和为X1+X2+X3+X4,
总和>A,
总和
我刚刚更改了作为findall/3
的结果而使用的模板,以获得排序排列(使用msort/2
),并将findall/3
更改为setof/3
,以删除重复项
请注意,打印结果而不是向过程中添加第四个参数来统一结果(然后调用方可以打印它,如果它愿意的话)。或者您可以简单地添加排序约束,例如
成员(X1,L),成员(X2,L),X2>=X1,成员(X3,L),X3>=X2,成员(X4,L),X4>=X3,…
和removemsort(…)
应该更快,因为您可以在最早的时候避免不必要的计算