セットのリストを生成する方法を理解しようとしています。各セットの長さはNで、各セットの合計はXです。
私はこのコードを見つけました:
num_split(0,[]).
num_split(N, [X | List]):-
between(1,N,X),
plus(X,Y,N),
num_split(Y,List).
そして、それを使用して、合計Xのセットのリストを取得できます。
num_split(6,List),length(List,5).
List = [1, 1, 1, 1, 2] ;
List = [1, 1, 1, 2, 1] ;
List = [1, 1, 2, 1, 1] ;
List = [1, 2, 1, 1, 1] ;
List = [2, 1, 1, 1, 1] ;
false.
問題は、それらがすべて順列であり、私が組み合わせを探しているということです。私が探している出力は次のようになりますget_combos(Sum,Length,List)
:
get_combos(6,2,List).
List = [5,1];
List = [4,2];
List = [3,3];
false.
ポインタはありますか?