このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1311089619/745
#  [1] 授業単元:情報処理概論 
#  [2] 問題文(含コード&リンク):0 が入力されるまで正整数を読み込み、最大値、(最後の0 を除いた)最小値、全入力数値の平均(最 
#  後の0 を含めず) を出力するプログラムを作りなさい。  
#  

'0 が入力されるまで正整数を読み込み、最大値、(最後の0 を除いた)最小値、全入力数値の平均(最後の0 を含めず) を出力する'
        '0 が入力されるまで正整数を読み込み'(_正整数ならび),
        最大値(_正整数ならび,_最大値),
        最小値(_正整数ならび,_最小値),
        全入力の平均(_正整数ならび,_全入力の平均),
        出力する(_最大値,_最小値,_全入力の平均).

'0 が入力されるまで正整数を読み込み'(_正整数ならび) :-
        get_integer(N),
        '0 が入力されるまで正整数を読み込み'(N,_正整数ならび).

正整数を読み込み(0,[]) :- !.
正整数を読み込み(N,[N|R]) :-
        N > 0,
        get_integer(N2),
        正整数を読み込み(N2,R).
正整数を読み込み(N,R) :-
        N < 0,
        get_integer(N2),
        正整数を読み込み(N2,R).

最大値([N|R],_最大値) :-
         最大値(R,N,_最大値).

最大値([],_最大値,_最大値).
最大値([N|R1],_仮の最大値,_最大値) :-
        N =< _仮の最大値,
        最大値(R1,_仮の最大値,_最大値).
最大値([N|R1],_仮の最大値,_最大値) :-
        N > _仮の最大値,
        最大値(R1,N,_最大値).

最小値([],_最小値,_最小値).
最小値([N|R1],_仮の最小値,_最小値) :-
        N >= _仮の最小値,
        最小値(R1,_仮の最小値,_最小値).
最小値([N|R1],_仮の最小値,_最小値) :-
        N < _仮の最小値,
        最小値(R1,N,_最小値).

全入力の平均([],_全入力の平均) :-
        write('正整数の入力がなかったため平均は出せません\n'),!,
        fail.
全入力の平均(_正整数ならび,_全入力の平均) :-
        length(_正整数ならび,_要素数),
        合計(_正整数ならび,_合計),
        _全入力の平均 is _合計 / _要素数.

合計([],0).
合計([N|R],_合計) :-
        _合計(R,_合計1),
        _合計 is N + _合計1.

出力する(_最大値,_最小値,_全入力の平均) :-
        writef('最大値は %t です\n最小値は %t です\n全入力の平均は %t です\n',
[_最大値,_最小値,_全入力の平均]).