このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1335517816/456
#  {1] 授業単元:プログラミング演習  
#  [2] 問題文:  
#  100点満点の試験を10人分整数型配列data[10]に入力すると、得点の高い順に出力されるプログラムを作成。 
#  

'100点満点の試験の点数を10人分入力し、得点の高い順に出力する' :-
        '100点満点の試験の点数を10人分入力し'(_10人分の点数ならび),
        得点の高い順に出力する(_10人分の点数ならび).

'100点満点の試験の点数を10人分入力し'(_10人分の点数ならび) :-
        '10人分'(_10人分の点数ならび),
        findall(_点数,(
                    append(L1,[_点数|_],_10人分の点数ならび),
                    '100点満点の試験の点数を入力'(L1,_点数)),
                _10人分の点数ならび).

'10人分'(_10人分の点数ならび) :-
        length(_10人分の点数ならび,10).

'100点満点の試験の点数を入力'(Ln,_点数) :-
        length([_|Ln],_何人目),-
        writef('%t人目の点数を入力してください : ',[_何人目]),
        get_line(Line),
        '100点満点の試験の点数を入力診断'(Line,_点数),!.
'100点満点の試験の点数を入力'(Ln,_点数) :-
        '100点満点の試験の点数を入力'(Ln,_点数).

'100点満点の試験の点数を入力診断'(Line,_点数) :-
        atom_to_term(Line,_点数,_),
        integer(_点数),
        '100点満点の'(_点数),!.
'100点満点の試験の点数を入力診断'(Line,_点数) :-
         writef('入力された %t からは適切な試験の点数が得られません。\n再入力をお願いします。\n',[Line]),
        fail.

'100点満点の'(_点数) :-
        _点数 >= 0,
        _点数 =< 100,!.

得点の高い順に出力する([_点数]) :-
        writef('%t\n',[_点数]),!.
得点の高い順に出力する(_点数ならび) :-
        max(_点数ならび,_選択された点数),
        select(_選択された点数,_点数ならび,_選択された点数を取り除いた点数ならび),
        writef('%t ',[_選択された点数]),
        得点の高い順に出力する(_選択された点数を取り除いた点数ならび).