09/07/11 17:19:44
>>434
% Prolog
t434 :-
'10人分の試験の点数を読み取る'(L),
平均(L,_平均),標準偏差(L,_標準偏差),
write_formatted('平均 : %t\n標準偏差 : %t\n',[_平均,_標準偏差]).
平均(L,M) :- length(L,N),平均(L,N,0.0,M).
平均([],N,S,M) :- M is S / N,!.
平均([A|R],N,S,M) :- S1 is S + A,平均(R,N,S1,M).
標準偏差(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).
'10人分の試験の点数を読み取る'(L) :- '10人分の試験の点数を読み取る'(1,L). !.
'10人分の試験の点数を読み取る'(11,[]) :- !.
'10人分の試験の点数を読み取る'(M,[I|R]) :-
write_formatted(' %t: ',[M]),
get_line(Atom),
atom_to_term(Atom,I,_),
M2 is M + 1,
'10人分の試験の点数を読み取る'(M2,R).