このディレクトリの索引
http://pc12.2ch.net/test/read.cgi/tech/1274827528/217
#  [1] 授業単元:Cプログラミング  
#  [2] 問題文(含コード&リンク):  
#  下記のアップロードされたファイル(数字の羅列)を読み込み、並び替え方法(昇順/降順)で指定されたファイル(out.txt) 
#  へ出力するプログラムを作成せよ 
#  http://ime.nu/www1.axfc.net/uploader/He/so/280605 
#  以下実行結果 
#   
#  並び替え方法をしていしてください(1:昇順、2:降順) 
#  1 
#   
#  並び替えたファイルへ出力しました。 
#   
#  cat out.txt      ←catコマンドで中身確認 
#  1 
#  3 
#  3 
#  3 
#  

'下記のアップロードされたファイル(数字の羅列)を読み込み、並び替え方法(昇順/降順)で指定されたファイル(out.txt)へ出力する'(_並べ替え方法) :-
        get_lines('input.txt',Lines),
        整列(_並べ替え方法,Lines,Lines2),
        put_lines('out.txt',Lines2).

整列(_並べ替え方法,_対象ならび,_整列されたならび) :-
        分割閾値の選択(_対象ならび,_分割閾値,_それ以外のならび),
        分割(_並べ替え方法,_それ以外のならび,_分割閾値,_左側ならび,_右側ならび),
        整列(_並べ替え方法,_左側ならび,_整列された左側ならび),
        整列(_並べ替え方法,_右側ならび,_整列された右側ならび),
        append(_整列された左側ならび,[_分割閾値|_整列された右側ならび],_整列されたならび).
整列(_,[],[]).

分割閾値の選択([_分割閾値|_残りならび],_分割閾値,_残りならび) :- ここでは先頭要素を分割閾値とする.

ここでは先頭要素を分割閾値とする.

分割(昇順,[_要素|_残りならび],_分割閾値,[_要素|_左側ならび],_右側ならび) :- _要素 @=< _分割閾値,
        分割(昇順,_残りならび,_分割閾値,_左側ならび,_右側ならび).
分割(降順,[_要素|_残りならび],_分割閾値,[_要素|_左側ならび],_右側ならび) :- _要素 @>= _分割閾値,
        分割(降順,_残りならび,_分割閾値,_左側ならび,_右側ならび).
分割(昇順,[_要素|_残りならび],_分割閾値,_左側ならび,[_要素|_右側ならび]) :- _要素 @> _分割閾値,
        分割(昇順,_残りならび,_分割閾値,_左側ならび,_右側ならび).
分割(降順,[_要素|_残りならび],_分割閾値,_左側ならび,[_要素|_右側ならび]) :- _要素 @< _分割閾値,
        分割(降順,_残りならび,_分割閾値,_左側ならび,_右側ならび).
分割(_,[],_,[],[]).