このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1288531658/578
#  [1] 授業単元: プログラミング  
#  [2] 問題文(含コード&リンク):  
#      
#  実数を10個キーボードから入力として受け付け, 
#  その後,最初の5個のデータの平均値,及びすべて(10個の) 
#  データの平均値を実数値で出力しなさい。 
#  (この問題は配列を使用してはいけない)  
#   
#  入力例: 0.5 1.5 2.5 3.5 4.5 5.5 6.5 7.5 8.5 9.5  
#  入力例に対する出力: 2.500000 5.000000 注) 
#  %fで出力の書式を指定した場合,小数点以下何桁表示されるかは処理系に依存するので気にしなくてよい。 #   

'実数を10個キーボードから入力として受け付け,その後,最初の5個のデータの平均値,及びすべて(10個の)データの平均値を実数値で出力しなさい。' :-
        rawmode,
        '実数を10個キーボードから入力として受け付け積算していく'(1,0.0,0.0,_最初の最初の5個のデータの平均値,_すべてのデータの平均値),
        write_fomatted('%f %f\n',[_最初の最初の5個のデータの平均値,_すべてのデータの平均値]),
        norawmode.

'実数を10個キーボードから入力として受け付け積算していく'(10,S1,S2,Avg1,Avg2) :-
        Avg2 is S2 / 10,!.
'実数を10個キーボードから入力として受け付け積算していく'(5,S1,S2,Avg1,_Avg2) :-
        Avg1 is S1 / 5,
        get_float_rawmode(_実数値),
        S1_2 is S1 + _実数値,
        S2_2 is S2 + _実数値,
        '実数を10個キーボードから入力として受け付け積算していく'(6,S1,S2,Avg1,Avg2).
'実数を10個キーボードから入力として受け付け積算していく'(N,S1,S2,Avg1,_Avg2) :-
        get_float_rawmode(_実数値),
        S1_2 is S1 + _実数値,
        S2_2 is S2 + _実数値,
        N2 is N + 1,
        '実数を10個キーボードから入力として受け付け積算していく'(N2,S1,S2,Avg1,Avg2).

get_float_rawmode(_実数値) :-
        readw(Word),
       get_float診断(Word,_実数値),!.
get_float_rawmode(_実数値) :-
        get_float_rawmode(_実数値).

get_float_rawmode診断(Word,_実数値) :-
        atom_to_term(Word,_実数値,_),
        float(_実数値),!.
get_float_rawmode診断(Word,_実数値) :-
        write_formatted('入力された%tからは実数値が得られませんでした。再入力をお願いします\n',[Word]),
        fail.

readw(S) :-
        error_protect(get_code(X),X = -1),
        readw1(X,L,[]),
        name(S,L),!.

readw1(10,[],[]) :- !.
readw1(10,L,L2) :- !,reverse(L2,L).
readw1(10,L,[13|L1]) :- !,reverse(L1,L) .
readw1(32,L,L1) :- \+(L1=[]),!,reverse(L1,L).
readw1(-1,L,[A|L1]) :- reverse([A|L1],L).
readw1(-1,[101,110,100,95,111,102,95,102,105,108,101],L2) :- !.
readw1(32,L,L1) :- L1=[],!,
        get_code(Y),
        put_code(Y),
        readw1(Y,L,L1).
readw1(X,L,L1) :-
        get_code(Y),!,
        put_code(Y),
        readw1(Y,L,[X|L1]) .