Prolog 查找大小大于元素数的元素组合

Prolog 查找大小大于元素数的元素组合,prolog,combinations,permutation,prolog-lists,clpfd,Prolog,Combinations,Permutation,Prolog Lists,Clpfd,例如,我有一个保险箱,需要回答长度为5(XXXXX)的数字,但您只使用1,2,3。所以有些组合可以是1,2,3&1,1,1&1,1,2等等。。。但我需要找到所有的可能性 我进行了头脑风暴,我想我需要找到三个数字的所有组合的所有排列,但我不知道如何找到大小为5的答案 如果它只有三个数字,答案是长度3,我可以使用置换函数,但这不起作用,因为我需要它比使用的元素大。没有问题 ?使用_模块(库(clpfd))。 对。 ?长度(Zs,5),Zs英寸1..3,标记([],Zs)。 Zs=[1,1,1,1,1

例如,我有一个保险箱,需要回答长度为5(XXXXX)的数字,但您只使用1,2,3。所以有些组合可以是1,2,3&1,1,1&1,1,2等等。。。但我需要找到所有的可能性

我进行了头脑风暴,我想我需要找到三个数字的所有组合的所有排列,但我不知道如何找到大小为5的答案

如果它只有三个数字,答案是长度3,我可以使用置换函数,但这不起作用,因为我需要它比使用的元素大。

没有问题

?使用_模块(库(clpfd))。 对。 ?长度(Zs,5),Zs英寸1..3,标记([],Zs)。 Zs=[1,1,1,1,1] ; Zs=[1,1,1,1,2] ; Zs=[1,1,1,1,3] ; Zs=[1,1,1,2,1] ; Zs=[1,1,1,2,2] ; Zs=[1,1,1,2,3] ; Zs=[1,1,1,3,1] ; Zs=[1,1,1,3,2] ; Zs=[1,1,1,3,3] ; Zs=[1,1,2,1,1] ... 没问题,请使用:


在建立一个数字之前,你能在相同条件下建立一个长度为5的列表吗 ?- use_module(library(clpfd)). true. ?- length(Zs, 5), Zs ins 1..3, labeling([], Zs). Zs = [1, 1, 1, 1, 1] ; Zs = [1, 1, 1, 1, 2] ; Zs = [1, 1, 1, 1, 3] ; Zs = [1, 1, 1, 2, 1] ; Zs = [1, 1, 1, 2, 2] ; Zs = [1, 1, 1, 2, 3] ; Zs = [1, 1, 1, 3, 1] ; Zs = [1, 1, 1, 3, 2] ; Zs = [1, 1, 1, 3, 3] ; Zs = [1, 1, 2, 1, 1] ...
rebmem(L,Y) :- member(Y,L).

?- length(Zs,5), maplist(rebmem([1,2,3]),Zs).
Zs = [1, 1, 1, 1, 1] ;
Zs = [1, 1, 1, 1, 2] ;
Zs = [1, 1, 1, 1, 3] ;
Zs = [1, 1, 1, 2, 1] ;
Zs = [1, 1, 1, 2, 2] ;
Zs = [1, 1, 1, 2, 3] ;
Zs = [1, 1, 1, 3, 1] ;
Zs = [1, 1, 1, 3, 2] ;
Zs = [1, 1, 1, 3, 3] ;
Zs = [1, 1, 2, 1, 1]