このディレクトリの索引
http://pc12.2ch.net/test/read.cgi/tech/1280653311/89
#  [1] 授業単元:プログラミング C 
#  [2] 問題文(含コード&リンク):入力した5つのデータを大きい順に並び替えるプログラムを作れ。 
#  例↓ 
#  a0=4 
#  a1=7 
#  a2=12 
#  a3=1 
#  a4=5 
#  rank1: 12 
#  rank2: 7 
#  rank3: 5 
#  rank4: 4 
#  rank5: 1 
#               次に入力した5つのデータを大きい順に順番をつけるプログラムを作れ。 
#  例↓ 
#  a0=4 
#  a1=7 
#  a2=12 
#  a3=1 
#  a4=5 
#  a0=4 : rank4 
#  a1=7 : rank2 
#  a2=12 : rank1 
#  a3=1 : rank5 
#  a4=5 : rank3 
#  

入力した5つのデータを大きい順に並び替える :-
        入力した5つのデータ(1,L1),
        ランク付けして表示(1,L2).

入力した5つのデータ(N,[]) :- N > 5,!.
入力した5つのデータ(N1,[Line|R]) :-
        write_formatted('a%t=',[N1]),
        get_line(Line),
        N2 is N1 + 1,
        入力した5つのデータ(N2,R).

大きい順に並び替える(L1,L2) :-
        L1 = [A|R],
        大きい順に並び替える(A,R,L2).

大きい順に並び替える(A,L1,L2) :-
        大きい順整列のための分割(A,L1,L3,L4),
        大きい順に並び替える(L3,L5),
        大きい順に並び変える(L4,L6),
        append(L5,[A|L6],L2).

大きい順整列のための分割(_,[],[],[]) :- !.
大きい順整列のための分割(A,[B|R1],[B|R2],L2) :-
        B @>= A,
        大きい順整列のための分割(A,R1,R2,L2),!.
大きい順整列のための分割(A,[B|R1],L2,[B|R2]) :-
        B @< A,
        大きい順整列のための分割(A,R1,L2,R2),!.

ランク付けして表示(_,[]) :- !.
ランク付けして表示(N,[A|R]) :-
        write_formatted('rank%t: %t\n',[N,A]),
        N2 is N + 1,
        ランク付けして表示(N2,R).