このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1276873238/794
#  正の整数mとn(1<=n<=9)を入力し, m桁の1以上n以下の数字を組み合わせてできる全ての数列を出力するプログラムを作れ. 
#   
#  mが3でnが2の場合の例: 
#  111 
#  112 
#  121 
#  122 
#  211 
#  212 
#  221 
#  222 
# 
# 

'正の整数mとn(1<=n<=9)を入力し, m桁の1以上n以下の数字を組み合わせてできる全ての数列を出力する' :-
        '正の整数mとn(1<=n<=9)を入力し'(_m,_n),
        m桁の1以上n以下の数字を組み合わせてできる全ての数列を出力する(_m,_n).

'正の整数mとn(1<=n<=9)を入力し'(_m,_n) :-
        整数を得る(正の整数m,_m > 0,_m),
        整数を得る('n(1<=n<=9)',(_n>=1,_n=<9),_n).

m桁の1以上n以下の数字を組み合わせてできる全ての数列を出力する(_m,_n) :-
        m桁の1以上n以下の数字を組み合わせてできる全ての数列を(_m,_n,_m桁の1以上n以下の数字を組み合わせてできる全ての数列),
        出力する(_m桁の1以上n以下の数字を組み合わせてできる全ての数列).

m桁の1以上n以下の数字を組み合わせてできる全ての数列を(_m,_n,_m桁の1以上n以下の数字を組み合わせてできる全ての数列) :-
        繰り返し数の制御のため_mをならびLmに変換する(_m,Lm),
        findall(_m桁の数字列,(
                    m桁の1以上n以下の数字を組み合わせてできる数列(Lm,_n,_m要素の数字ならび),
                    atomic_list_concat(_m要素の数字ならび,_m桁の数字列)),
                _m桁の1以上n以下の数字を組み合わせてできる全ての数列).

m桁の1以上n以下の数字を組み合わせてできる数列([],_,[]).
m桁の1以上n以下の数字を組み合わせてできる数列([_|Lm],_n,[_1以上n以下の数字|R]) :-
       '1以上n以下の数字を'(_n,_1以上n以下の数字),
       m桁の1以上n以下の数字を組み合わせてできる数列(Lm,_n,R).

'1以上n以下の数字を'(_n,_1以上n以下の数) :-
        between(1,_n,_1以上n以下の数),
        atom_number(_1以上n以下の数字,_1以上n以下の数).

出力する(_数字文字列ならび) :-
        append(_,[_数字文字列|_残り要素],_数字文字列ならび),
        writef('%t',[_数字文字列]),
        _残り要素 = [].

繰り返し数の制御のため_mをならびLmに変換する(_m,Lm) :-
        length(Lm,_m).