このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1349527750/324
#  [1] 授業単元:一次元配列 
#  [2] 問題文 
#  キーボードから得点を入力し、最高点、最低点、合計点、平均点を表示した後、元の得点と、元の得点から平均点を引いた値を表示させるプログラムを作成しなさい。なお、配列の要素数は100個とし、得点の終わりは999とする。 
#   
#  

'キーボードから得点を入力し(要素数は最大100個とし、999の入力を以って得点の入力を終了する)、最高点、最低点、合計点、平均点を表示した後、元の得点と、元の得点から平均点を引いた値を表示させるプログラムを作成しなさい。' :-
        'キーボードから得点を入力し(要素数は最大100個とし、999の入力を以って得点の入力を終了する)'(_得点ならび),
        '最高点、最低点、合計点、平均点を表示した後'(_得点ならび,_平均点),
        '元の得点と、元の得点から平均点を引いた値を表示させる'(_得点ならび,_平均点).

'キーボードから得点を入力し(要素数は最大100個とし、999の入力を以って得点の入力を終了する)'(_得点ならび) :-
        整数を得る(得点,_得点),
        'キーボードから得点を入力し(ただし最大要素数は100個とし、得点の終わりは999とする)'(0,_得点,_得点ならび).

'キーボードから得点を入力し(ただし最大要素数は100個とし、得点の終わりは999とする)'(1000,_,[]) :- !.
'キーボードから得点を入力し(ただし最大要素数は100個とし、得点の終わりは999とする)'(_,999,[]) :- !.
'キーボードから得点を入力し(ただし最大要素数は100個とし、得点の終わりは999とする)'(M_1,_得点,[_得点|R]) :-
        得点を得る(得点,_得点_2),
        M_2 is M_1 + 1,
        'キーボードから得点を入力し(ただし最大要素数は100個とし、得点の終わりは999とする)'(M_2,_得点_2,R).

'最高点、最低点、合計点、平均点を表示した後'(_得点ならび,_平均点) :-
        最高点(_得点ならび,_最高点),
        最低点(_得点ならび,_最低点),
        平均点(_得点ならび,_平均点),
        writef('最高点 = %t, 最低点 = %t, 平均点 = %t\n',[_最高点,_最低点,_平均点).

最高点([_得点|R],_最高点) :-
        最高点(R,_得点,_最高点).

最高点([],_最高点,_最高点).
最高点([_得点|R],_これまでの最高点,_最高点) :-
        _得点 >= _これまでの最高点,
        最高点(R,_得点,_最高点),!.
最高点([_得点|R],_これまでの最高点,_最高点) :-
        最高点(R,_これまでの最高点,_最高点),!.

最低点([_得点|R],_最低点) :-
        最高点(R,_得点,_最低点).

最低点([],_最低点,_最低点).
最低点([_得点|R],_これまでの最低点,_最低点) :-
        _得点 =< _これまでの最低点,
        最低点(R,_得点,_最低点),!.
最低点([_得点|R],_これまでの最低点,_最低点) :-
        最低点(R,_これまでの最低点,_最低点),!.

平均点([_得点|R],_平均点) :-
        length([_得点|R],_要素数),
        合計([_得点|R],0,_合計点),
        _平均点 is _合計点 / _要素数.

合計([],_合計点,_合計点).
合計([_得点|R],_合計点_1,_合計点) :-
        _合計点_2 is _合計点_1 + _得点,
        合計(R,_合計点_2,_合計点),!.

'元の得点と、元の得点から平均点を引いた値を表示させる'([_],_).
'元の得点と、元の得点から平均点を引いた値を表示させる'([_元の得点|R],_平均点) :-
        _元の得点から平均点を引いた値 is _元の得点 - _平均点,
        write('%t,%t\n',[_元の得点,_元の得点から平均点を引いた値]),
        '元の得点と、元の得点から平均点を引いた値を表示させる'(R,_平均点).