このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1335517816/423
#  {1] 授業単元:プログラミング演習  
#  [2] 問題文:  
#  100点満点の試験の学生10人の得点データをキーボードから 
#  整数型配列data[10]に入力すると、最高点とその要素番号が出力されるプログラムを作成。 
#  同点はないものとする。 
#  

'100点満点の試験の学生10人の得点データをキーボードから入力すると、最高点とその要素番号が出力されるプログラムを作成。同点はないものとする。' :-
        '100点満点の試験の学生10人の得点データをキーボードから入力すると'(_学生10人の得点データ),
        '最高点とその要素番号が出力される'(_学生10人の得点データ).

'100点満点の試験の学生10人の得点データをキーボードから入力すると'(_学生10人の得点データ) :-
        length(_学生10人の得点データ,10),
        findall(_得点,(
                    append(L0,[_得点|R],_学生10人の得点データ),
                    '100点満点の得点の入力'(L0,_得点)),
                _学生10人の得点データ).

'最高点とその要素番号が出力される'(_学生10人の得点データ) :-
        max(_学生10人の得点データ,_最高点),
        nth1(_要素番号,_学生10人の得点データ,_最高点),
        writef('最高点 = %t点, その要素番号(1起点) = %t\n',[_最高点,_要素番号]).

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

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


%
%  この一般的な入力プログラムはこの課題には適さない。
%  バックトラックしての入力はこれまでどのような入力があったかを
%  検査することができない。
%  この課題では同点はないものとするという条件があり、これを入力時に
%  検査する為には再帰的な制御、すなわち集約が必要になる。