このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1307166756/113
#  [1] 授業単元:プログラム 
#  [2] 問題文:得点データをバブルソートを用いて国語の得点の大きい順に並び替えよ 
#  番号 国語 数学 
#      01     78     64 
#      02     68     78 
#      03     83     55 
#      04     91     90 
#  

得点データ('01',78,64).
得点データ('02',68,78).
得点データ('03',83,55).
得点データ('04',91,90).

得点データをバブルソートを用いて国語の得点の大きい順に並び替えよ :-
        findall([_国語,_番号,_数学],(
                    得点データ(_番号,_国語,_数学)),
                _得点データならび),
        バブルソート(_得点データならび,_昇順得点データならび),
        reverse(_昇順得点データならび,_国語の得点の大きい順ならび),
        表示(_国語の得点の大きい順ならび).

バブルソート(_対象ならび,_整列済みならび) :-
        交換(_対象ならび,_対象ならびの一),!,
        バブルソート(_対象ならびの一,_整列済みならび).
バブルソート(_整列済みならび,_整列済みならび).

交換([],[]) :- !,fail.
交換([A,B|R],[B,A|R]) :-
        A @> B,!.
交換([A|R1],[A|R2]) :-
        交換(R1,R2).

表示(_国語の得点の大きい順ならび) :-
        writef('番号 国語 数学\n'),
        append(_,[[_国語,_番号,_数学]|R],_国語の得点の大きい順ならび),
        writef('%t   %t   %t\n',[_番号,_国語,_数学]),
        R = [].