このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1288531658/542
#  [2] 問題文: 
#  (1)10個の最大値を求める 
#       10人の身長データを順にcmで入力したとき、一番大きな身長は何僂を表示するプログラムを作成しなさい。 
#     実行結果は次の形らしいです。 
#     1人目の身長を入力してください (単位 : cm) 
#         (入力待ち) 
#        2人目の身長を入力してください (単位 : cm) 
#        (入力待ち) .....略..... 
#        10人目の身長を入力してください (単位 : cm) 
#        (入力待ち) 
#     この中で身長が高い人は、○○cmです。 
#   ・指定 
#     for文を使い処理を10回繰り返す。 
#     最大値を記憶する変数を用意し、0を代入しておく。 
# 
# 

'10人の身長データを順にcmで入力したとき、一番大きな身長は何僂を表示する' :-
        身長を入力する(1,_身長),
        最大値を確保しながら身長を入力してもらう(1,_身長,0,_最大値),
        write_formatted('この中で身長が高い人は、%tcmです。',[_最大値]).

最大値を確保しながら身長を入力してもらう(10,_身長,_これまでの最大値,_身長) :-
        _身長 > _これまでの最大値,!.
最大値を確保しながら身長を入力してもらう(10,_身長,_これまでの最大値,_最大値) :-
        _身長 =< _これまでの最大値,
        _最大値 = _これまでの最大値,!.
最大値を確保しながら身長を入力してもらう(N,_身長1,_これまでの最大値,_最大値) :-
        _身長1 > _これまでの最大値,
        身長を入力する(N,_身長2),
        N2 is N + 1,
        最大値を確保しながら身長を入力してもらう(N2,_身長2,_身長1,_最大値).
最大値を確保しながら身長を入力してもらう(N,_身長1,_これまでの最大値,_最大値) :-
        _身長1 =< _これまでの最大値,
        身長を入力する(N,_身長2),
        N2 is N + 1,
        最大値を確保しながら身長を入力してもらう(N2,_身長2,_これまでの最大値,_最大値).

身長を入力する(N,_身長) :-
        write_formatted('%t人目の身長を入力してください (単位 : cm)  : ',[N]),
        get_line(Line),
        身長を入力診断(Line,_身長),!.
身長を入力する(N,_身長) :-
        身長を入力する(N,_身長).

身長を入力診断(Line,_身長) :-
        atom_to_term(Line,_身長,_),
        integer(_身長),
        _身長 > 0,!.
身長を入力診断(Line,_身長) :-
        write_formatted('入力された %t からは身長らしき整数は得られませんでした。',[Line]),
        write('再入力をお願いします。\n'),
        fail.