このディレクトリの索引

#  与えられた自然数 N にたいして,リスト L=[m1,m2,・・・,mr] で
#  次の性質を持つものをすべてせいせいする述語 partition(N,L) を作れ.
#  m1+m2+・・・+mr=N
#  m1>m2>・・・>mr>0
#  飯高茂著 「Prologで作る数学の世界」 第7章 問題6 p137-138
#  より出題

partition(N,L) :-
        findall(M,for(N,M,1),L1),
        findall(L2,(
                    for(N,M,1),
                    組合せ(L1,M,L2),
                    sum_S(L2,N,0)),
               L).

sum_S([A|R],S,M) :-
        M >= S,!,fail.
sum_S([],N,N) :- !.
sum_S([A|R],S,M) :-
        M2 is A + M,
        sum_S(R,S,M2).