このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1322562648/737
#  [1] 授業単元:プログラミング演習  
#  [2] 問題文(含コード&リンク):  
#  任意の0〜nの整数から、重複を許してm個の整数を選び出力するプログラムを作れ。 
#  

'任意の0〜nの整数から、重複を許してm個の整数を選び出力する'(_n,_m) :-
        '任意の0〜nの整数から'(_n,_整数ならび),
        findall(L,(
                    '重複を許してm個の整数を選び'(_整数ならび,_m,_重複を許したm個の整数ならび)),
                LL),
        出力する(LL).

'任意の0〜nの整数から'(_n,_整数ならび) :-
        findall(N,(
                    for(0,N,_n)),
                _整数ならび).

'重複を許してm個の整数を選び'(L,1,[_整数]) :-
        member(N,L).
'重複を許してm個の整数を選び'([_整数|R1],M,[_整数|R3]) :-
        M > 1,
        M_1 is M - 1,
        '重複を許してm個の整数を選び'([A|R1],M_1,R3).
'重複を許してm個の整数を選び'([_|R1],M,R3) :-
        M > 1,
        '重複を許してm個の整数を選び'(R1,M,R3).

出力する(LL) :-
        append(_,[L|R],LL),
        concat_atom(L,',',_表示文字列),
        writef('%t\n',[_表示文字列]),
        R = [].