このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1289913298/348
#  [1] 授業単元: プログラミング 
#  [2] 問題文:たとえば、100個の数字が用意されたファイルを用意します。  
#  そのファイルを使って平均値を求めるプログラムを作りたいのですが教えてください。  
#  ファイル名は適当で良いです。  
#   
#  平均値を求める計算は関数部分でお願いします。  
#   

ファイルから読み出した数字の平均を求める(_ファイル) :-
        100個の数字が用意されたファイルを用意します。(_ファイル),
        get_lines(_ファイル,Lines),
        findall(V,(
                    append(_,[Line|_],Lines),
                    atom_to_term(Line,V,_)),
                _標本ならび),
        重み付け可能な汎用平均器(_標本ならび,[],[],0,0,0,_相加平均,_調和平均,_相乗平均),
        write_formatted('相加平均は %t, 調和平均は %t, 相乗平均は %t です。\n',[_相加平均,_調和平均,_相乗平均]).

100個の数字が用意されたファイルを用意します。(_ファイル) :-
        length(L,100),
        100個の数字を用意する(L),
        tell(_ファイル),
        put_lines(L),
        told,!.

100個の数字を用意する([]).
100個の数字を用意する([V|R]) :-
        V is random mod 1000,
        100個の数字を用意する(R).

重み付け可能な汎用平均器([],_,Ln,_相加和,_調和和,_相乗和,_相加平均,_調和平均,_相乗平均) :-
        length(Ln,N),
        _相加平均 is _相加和 / N,
        _調和平均 is N / _調和和,
        _相乗平均 is exp(_相乗和 / N),
        !.
重み付け可能な汎用平均器([A|R],[],Ln,_相加和,_調和和,_相乗和,_相加平均,_調和平均,_相乗平均) :-
        _相加和2 is _相加和 + A,
        _調和和2 is _調和和 + (1.0 / A),
        S0 is ln(A),
        _相乗和2 is _相乗和 + S0,
        重み付け可能な汎用平均器(R,[],[_|Ln],_相加和2,_調和和2,_相乗和2,_相加平均,_調和平均,_相乗平均).
重み付け可能な汎用平均器([A|R],[_重み|R2],Ln,_相加和,_調和和,_相乗和,_相加平均,_調和平均,_相乗平均) :-
        _相加和2 is _相加和 + A * _重み,
        _調和和2 is _調和和 + (1.0 / (A * _重み)),
        S0 is ln(A * _重み),
        _相乗和2 is _相乗和 + S0,
        重み付け可能な汎用平均器(R,R2,[_|Ln],_相加和2,_調和和2,_相乗和2,_相加平均,_調和平均,_相乗平均).