このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1307166756/119
#  [1] 授業単元:配列の並び替え  
#  [2] 問題文(含コード&リンク):  
#  次の処理を順に行うプログラムを作成しなさい。 
#  要素数5の整数型配列に、すべて異なる整数を入力させる。 
#  入力された順に、配列の中身を表示しなさい。 
#  次に、配列の中身を入れ替え、昇順に並び替えなさい。 
#  並び替えた配列の中身を表示しなさい。 
#  

'要素数5の整数型配列に、すべて異なる整数を入力させる。入力した順に、配列の中身を表示する。次に、配列の中身を入れ替え、昇順に並び替える。 並び替えた配列の中身を表示する' :-
        要素数5の整数型配列に、すべて異なる整数を入力させる(L),
        入力された順に、配列の中身を表示する(L),
        配列の中身を入れ替え、昇順に並び替える(L,L2),
        並び替えた配列の中身を表示する(L2).

'要素数5の整数型配列に、すべて異なる整数を入力させる'(_要素数5の整数ならび) :-
        length(_要素数5の整数ならび,5),
        '要素数5の整数型配列に、すべて異なる整数を入力させる'([],_要素数5の整数ならび).

'要素数5の整数型配列に、すべて異なる整数を入力させる'([],[]).
'要素数5の整数型配列に、すべて異なる整数を入力させる'(L1,[N|R]) :-
        length([_|L1],Nth),
        writef('整数[%t番目]を入力してください : ',[Nth]),
        get_line(Line),
        整数入力検査(Line,L1,N),!.
'要素数5の整数型配列に、すべて異なる整数を入力させる'(L1,L) :-
        '要素数5の整数型配列に、すべて異なる整数を入力させる'(L1,L).

整数入力検査(Line,L1,N) :-
        atom_to_term(Line,N,_),
        integer(N),
        \+(append(_,[N|_],L1)),!.
整数入力検査(Line,L1,N) :-
        \+(atom_to_term(Line,N,_)),
        !,
        writef('入力された %t からは整数を得られません。再入力をお願いします。\n',[Line]),
        fail.
整数入力検査(Line,L1,N) :-
        atom_to_term(Line,N,_),
        append(_,[N|_],L1),
        writef('入力された %t は既に入力があります。再入力をお願いします。\n',[N]),
        fail.

入力された順に、配列の中身を表示する(L) :-
        concat_atom(L,' ',S),
        writef('%t\n',[S]),!.

配列の中身を入れ替え、昇順に並び替える([],[]) :- !.
配列の中身を入れ替え、昇順に並び替える([A],[A]) :- !.
配列の中身を入れ替え、昇順に並び替える(L1,[A|R]) :-
        append(L0,[A|R0],L1),
        append(L0,R0,L2),
        min(L2,B),
        B @>= A,
        配列の中身を入れ替え、昇順に並び替える(L2,R).        

並び替えた配列の中身を表示する(L) :-
        concat_atom(L,' ',S),
        writef('%t\n',[S]).