このディレクトリの索引
# 出典  #511 
# [1] 授業単元:情報基礎B  
# [2] 問題文(含コード&リンク):試験の点数10人分をキーボードから入力し、以下の内容を出力するプログラムを作成せよ。  
# 平均点、標準偏差、得点の高い順の点数リスト(出来れば、バブルソート以外の
# アルゴリズムでお願いします。)  

t333(_点数ならび,_平均点,_標準偏差,_点数順ならび) :-
    算術平均(_点数ならび,_平均点),
    標準偏差(_点数ならび,_標準偏差),
    quicksort(_点数ならび,_点数順ならび).

算術平均([],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).

標準偏差([],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).

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

quicksort([],[]) :- !.
quicksort([X|Xs],Ys) :-
    partition(Xs,X,Littles,Gigs),
    quicksort(Littles,Ls),
    quicksort(Bigs,Bs),
    append(Ls,[X|Bs],Ys).

partition([],Y,[],[]) :- !.
partition([X|Xs],Y,[X|Ls],Bs) :- X @=< Y,partition(Xs,Y,Ls,Bs).
partition([X|Xs],Y,Ls,[X|Bs]) :- X @> Y,partition(Xs,Y,Ls,Bs).