我想弄清楚如何生成集合列表,其中每個集合的長度爲N,每個集合的總和爲X.獲取每個集合的總和爲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.
任何指針?
完美!我刪除了「鏈(List,#<)」,因爲我正在查找所有加總爲Sum的列表,而不僅僅是有序列表。我使用代碼解決了DropQuest 2012的第1章:https://github.com/seanhagen/DropQuest-2012-Chapter-1-Prolog-Solver –