このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1307166756/470
#  [1] 授業単元:ファイルから読み込んだ数値の集計  
#  [2] 問題文(含コード&リンク): 
#  ファイルnum1.txtには、実数での20個の数値が改行を挟んで入力されているものとする。 
#  そのとき、num1.txtの数値を全て読み込み、最大値、最小値、平均値を画面に表示するプログラムを作成しなさい。  
#  

'ファイルnum1.txtには、実数での20個の数値が改行を挟んで入力されているものとする。そのとき、num1.txtの数値を全て読み込み、最大値、最小値、平均値を画面に表示する' :-
        'ファイルnum1.txtには、実数での20個の数値が改行を挟んで入力されているものとする'(_20個の数値ならび),
        'そのとき、num1.txtの数値を全て読み込み、最大値、最小値、平均値を'(_20個の数値ならび,_最大値,_最小値,_平均値),
        画面に表示する(_最大値,_最小値,_平均値).

'ファイルnum1.txtには、実数での20個の数値が改行を挟んで入力されているものとする'(_20個の数値ならび) :-
        get_lines('num1.txt',LL),
        findall(V,(
                   append(_,[Line|_],LL),
                   atom_to_term(Line,V,_)),
                _20個の数値ならび). 

'そのとき、num1.txtの数値を全て読み込み、最大値、最小値、平均値を画面に表示する'(_20個の数値ならび,_最大値,_最小値,_平均値) :-
        最大値(_20個の数値ならび,_最大値),
        最小値(_20個の数値ならび,_最小値),
        平均値(_20個の数値ならび,_平均値).

画面に表示する(_最大値,_最小値,_平均値) :-
        writef('最大値 = %t, 最小値 = %t, 平均値 = %t\n',[_最大値,_最小値,_平均値]).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

最大値([A|R],X) :-
        最大値_1(R,A,X) .

最大値_1([],X,X) :- !.
最大値_1([A|R],B,X) :-
        A @> B,!,
        最大値_1(R,A,X).
最大値_1([_|R],A,X) :-
        最大値_1(R,A,X).

最小値([A|R],X) :-
        最小値_1(R,A,X).

最小値_1([A|R],B,X) :-
        A @> B,!,
        最小値_1(R,B,X).
最小値_1([A|R],_,X) :-
        !,最小値_1(R,A,X).
最小値_1([],X,X).

平均値(L,M) :-
        length(L,N),
        平均値(L,N,0.0e+00,M).

平均値([],N,S,M) :-
        M is S / N,!.
平均値([A|R],N,S,M) :-
        S1 is S + A,
        平均値(R,N,S1,M).