このディレクトリの索引
http://pc12.2ch.net/test/read.cgi/tech/1276810079/331
#  [1] 授業単元:一般情報処理 
#  [2] 問題文(含コード&リンク):次のような動作をするプログラムを作成せよ。 
#                 配列内のデータの最小値を返す。int min()   配列内のデータの最大値を返す。int max() 
#                               配列内のデータの平均値を返す。double mean()  配列内のデータの標準偏差を返す。double stdev() 
#                               ただしmain関数は次のものを使うこと。 
#                 int main(void){ 
#                               int a[15]={81,36,45,67,73,98,62,56,77,61,65,70,25,51,18}; 
#                               printf("min=%d\n",min(15,a)); 
#                               printf("max=%d\n",max(15,a)); 
#                               printf("average=%lf\n",mean(15,a)); 
#                               printf("standard deviation=%lf\n",stdev(15,a)); 
#                               return 0; }     
#                               さらに、配列a[]の各要素の偏差値を表示するプログラムを作成せよ 
#  


平均値([],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.0,M) .

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

最小値最大値([],_最小値,_最大値,_最小値,_最大値) :- !.
最小値最大値([A|R],_最小値1,_最大値1,_最小値,_最大値) :- A @> _最大値,最小値最大値(R,_最小値1,A,_最小値,_最大値),!.
最小値最大値([A|R],_最小値1,_最大値1,_最小値,_最大値) :- A @< _最小値,最小値最大値(R,A,_最大値1,_最小値,_最大値),!.
最小値最大値([A|R],_最小値1,_最大値1,_最小値,_最大値) :- 最小値最大値(R,_最小値1,_最大値1,_最小値,_最大値),!.

標準偏差(L,V) :- length(L,N),平均値(L,M),標準偏差(L,N,M,0.0,V).

標準偏差([],N,M,S,V) :- V is sqrt(S / (N - 1)),!.
標準偏差([A|R],N,M,S,V) :- S1 is (A - M) ^ 2,S2 is S + S1,標準偏差(R,N,M,S2,V).
偏差値(_標本値,_算術平均,_標準偏差,_偏差値) :- _偏差値 is 10 * (_標本値 - _算術平均) / _標準偏差 + 50 .

偏差値(L,_偏差値ならび) :-
        平均値(L,_平均値),
        標準偏差(L,_標準偏差),
        findall(_偏差値,(member(_値,L) ,偏差値(_値,_平均値,_標準偏差,_偏差値)),_偏差値ならび).