このディレクトリの索引
#  【 課題 】 
#  入力: int n 
#  出力: List list 
#  n 列の長さを持つすべての順列を辞書式で出力するメソッドを作成せよ。 
#  n=3の時 
#  結果は{123,132,213,231,312,321} 
#  
#  【 形態 】1. Javaアプリケーション(main()で開始) 
#  【 GUI  】なし 
#  【 期限 】11/07/2013 
#  【 Ver  】"1.7.0_11" 
#  
#  よろしくお願いいたします。

'入力: int n
出力: List list
n 列の長さを持つすべての順列を辞書式で出力するメソッドを作成せよ。
n=3の時
結果は{123,132,213,231,312,321}'(_n,_順列ならび) :-
        findall(N,between(1,_n,N),_数ならび),
        findall(_数値,(
                    順列(_数ならび,_n,_順列),
                    一桁の数値ならびから整数(_順列,_数値)),
                _順列ならび).

順列(_,0,[]).
順列(L,N,[A|R]) :-
        select(A,L,L2),
        N_1 is N - 1,
        順列(L2,N_1,R).

一桁の数値ならびから整数(_一桁の数値ならび,_数値) :-
        一桁の数値ならびから整数(_一桁の数値ならび,M,_数値).

一桁の数値ならびから整数([N],1,N).
一桁の数値ならびから整数([N|R],M,_整数) :-
        一桁の数値ならびから整数(R,M_1,_整数_1),
        M is M_1 + 1,
        _整数 is 10 ^ M_1 * N + _整数_1.