このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1260922392/95
#  どなたかご協力お願いします。 
#  1からmまでの整数の集合 A = {nは自然数|1≦n≦m}の中からn個の整数を取り出す組み合わせすべてを生成するプログラムを作れ。また、5C3の場合を表示せよ。(Cはコンビネーションです) 
#   
#  組み合わせを a1,a2,a3,・・・an としていって、a1<a2<a3<・・・<an となることを利用して作ると思われるのですが、、、 
# 
# 
%%  引数なし

'5C3の場合を表示せよ' :-
        '1からmまでの整数の集合 A = {nは自然数|1≦n≦m}の中からn個の整数を取り出す組み合わせすべてを生成する'(5,3,_組合せ),
        writef('%t\n',[_組合せ]),
        fail.
'5C3の場合を表示せよ'.

%%  1引数で

'5C3の場合を表示せよ'(L) :-
        findall(_組合せ,(
                    '1からmまでの整数の集合 A = {nは自然数|1≦n≦m}の中からn個の整数を取り出す組み合わせすべてを生成する'(5,3,_組合せ),
                     writef('%t\n',[_組合せ])),
                L).

'1からmまでの整数の集合 A = {nは自然数|1≦n≦m}の中からn個の整数を取り出す組み合わせすべてを生成する'(_m,_n,_組合せ) :-
        findall(N,for(1,N,_m),L),
        組合せ(L,_n,_組合せ).

組合せ(X,1,[A]) :-
        member(A,X).
組合せ([A|Y],N,[A|X]) :-
        N > 1,
        M is N - 1,
        組合せ(Y,M,X).
組合せ([_|Y],N,A) :-
        N > 1,
        組合せ(Y,N,A).