このディレクトリの索引
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点満点の得点(同点はないものとする)の入力'(L,L) :-
        length(L,10),!.
'100点満点の得点(同点はないものとする)の入力'(_既に入力された得点ならび,L) :-
        length([_|_既に入力された得点ならび],_何人目),
        writef('%t人目の得点を入力してください : ',[_何人目]),
        get_line(Line),
        '100点満点の得点(同点はないものとする)の入力診断'(Line,_既に入力された得点ならび,_得点),
        append(_既に入力された得点ならび,[_得点],_入力された得点を加えたならび),
        '100点満点の得点(同点はないものとする)の入力'(_入力された得点を加えたならび,L),!.
'100点満点の得点の入力'(_既に入力された得点ならび,L) :-
        '100点満点の得点の入力'(_既に入力された得点ならび,L).

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

同点はないものとする(_得点,_既に入力された得点ならび) :-
        \+(member(_得点,_既に入力された得点ならび)),!.
同点はないものとする(_得点,_既に入力された得点ならび) :-
        writef('得点%tは既に入力されています。別の得点を入力しなおしてください。\n',[_得点]),
        fail.