このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1307166756/490
#  [1] 授業単元:ファイルにある数字をすべて読み込む  
#  [2] 問題文(含コード&リンク): 
#  log1.txtには、0個以上の実数が1行に1つずつ、改行を挟んで記載されている。 
#  記載されている実数を全て読み込み、数値の個数、平均値、分散値を求めて表示するプログラムを作成しなさい。 
#  

'log1.txtには、0個以上の実数が1行に1つずつ、改行を挟んで記載されている。記載されている実数を全て読み込み、数値の個数、平均値、分散値を求めて表示する' :-
        findall(V,(
                    append(_,[Line|_],Lines),
                    atom_to_term(Line,V,_)),
                L),
        数値の個数(L,_個数),
        平均値(L,_平均値),
        分散値(L,_分散値),
        writef('個数 = %t, 平均値 = %t, 分散値 = %t\n',[_個数,_平均値,_分散値]).

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

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

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

分散値([],N,M,S,V) :- V is S / N,!.
分散値([A|R],N,M,S,V) :-
        S1 is (A - M) ^ 2,
        S2 is S + S1,
        分散値(R,N,M,S2,V).