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

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

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

'重複を許してm個の整数を選び'(_整数ならび,_n,_m,L) :-
        length(L,_m),
        findall(N,(
                    append(_,[N|_],L),
                    Nth is random(_n),
                    length(L0,Nth),
                    append(L0,[N|_],_整数ならび)),
                L).

出力する(L) :-
        append(_,[N|R],L),
        writef('%t ',[N]),
        R = [],
        write('\n').