このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1312201995/143
#  [1] 授業単元:情報処理 
#  [2] 問題文(含コード&リンク):数値(1~100)を入力し、入力された数の 
#  平均、標準偏差、最大値、最小値を求めるプログラムを作りなさい。 
#  

'数値(1~100)を入力し、入力された数の平均、標準偏差、最大値、最小値を求める'(平均,_標準偏差,_最大値,_最小値) :-
        '平均、標準偏差、最大値、最小値を求めるための対象データはリストとする'(L),
        '数値(1~100)を入力し、'(L),
        length(L,_要素数),
        '数の平均、標準偏差、最大値、最小値を求める'(L,_平均,_標準偏差,_最大値,_最小値).

'平均、標準偏差、最大値、最小値を求めるための対象データはリストとする'([_|_]).

'数の平均、標準偏差、最大値、最小値を求める'([N|R],_平均,_標準偏差,_最大値,_最小値) :-
        length([N|R],_要素数),
        '数の平均、標準偏差、最大値、最小値を求める'(R,_要素数,N,S,_平均,N,N,_最大値,_最小値),
        _標準偏差 is abs(sqrt((S / (_要素数 - 1)))).

'数の平均、標準偏差、最大値、最小値を求める'([],_要素数,_累計,0,_平均,_最大値,_最小値,_最大値,_最小値) :-
        _平均 is _累計 / _要素数.
'数の平均、標準偏差、最大値、最小値を求める'([N|R],_要素数,_累計1,V,_平均,_最大値1,_最小値1,_最大値,_最小値) :-
        N > _最大値1,
        _累計2 is N + _累計1,
        '数の平均、標準偏差、最大値、最小値を求める'([N|R],_要素数,_累計2,V1,_平均,N,_最小値1,_最大値,_最小値),
        V is (N - _平均) * (N - _平均) + V1.
'数の平均、標準偏差、最大値、最小値を求める'([N|R],_要素数,_累計1,V,_平均,_最大値1,_最小値1,_最大値,_最小値) :-
        N < _最小値1,
        _累計2 is N + _累計1,
        '数の平均、標準偏差、最大値、最小値を求める'([N|R],_要素数,_累計2,V1,_平均,_最大値1,N,_最大値,_最小値),
        V is (N - _平均) * (N - _平均) + V1.
'数の平均、標準偏差、最大値、最小値を求める'([N|R],_要素数,_累計1,V,_平均,_最大値1,_最小値1,_最大値,_最小値) :-
        N >= _最小値,
        N =< _最大値,
        _累計2 is N + _累計1,
        '数の平均、標準偏差、最大値、最小値を求める'([N|R],_要素数,_累計2,V1,_平均,_最大値1,_最小値1,_最大値,_最小値),
        V is (N - _平均) * (N - _平均) + V1.

'数値(1~100)を入力し、'(L) :-
        write('? '),
        get_integer(N,L).

'数値(1~100)を入力し、'(N,[]) :-
        負数が入力されたら数値の入力を終了することにする(N),!.
'数値(1~100)を入力し、'(N,[N|R]) :-
        N >= 1,
        N =< 100,
        write('? '),
        get_integer(N2),
        '数値(1~100)を入力し、'(N2,R).
'数値(1~100)を入力し、'(_,R) :-
        write('再入力 ? '),
        get_integer(N),
        '数値(1~100)を入力し、'(N,R).