このディレクトリの索引
http://pc12.2ch.net/test/read.cgi/tech/1263824755/91
#  [1] 授業単元:情報処理 
#  [2] 問題文: 
#   
#  問1 キーボードから3個の実数(整数でない)値を1行に1組として計5組入力し、 
#  ファイル(ファイル名data1.txt)に保存する。 
#   
#  問2 
#   問1で作ったファイルから実数値を読み込み、総合計と各組の実数の平均を求める。 
#  ただし、ファイルに書かれている組の数は不明とする。 
#   

'キーボードから3個の実数(整数でない)値を1行に1組として計5組入力し、ファイル(ファイル名data1.txt)に保存する。 ' :-
        'キーボードから3個の実数(整数でない)値を1行に1組として計5組入力'(1,L),
        open('data1.txt',write,Output),
        append(_,[[V1,V2,V3]|R],L),
        write_formatted(Output,'%t,%t,%t\n',[V1,V2,V3]),
        R = [],
        close(Output),!.

'キーボードから3個の実数(整数でない)値を1行に1組として計5組入力'(3,[]) :- !.
'キーボードから3個の実数(整数でない)値を1行に1組として計5組入力'(N,[L|R]) :-
        write_formatted('%t組目の入力 _実数1 _実数2 _実数3 : ',[N]),
        get_line(Line),
        入力の診断(Line,L),        
        N2 is N + 1,
        'キーボードから3個の実数(整数でない)値を1行に1組として計5組入力'(N2,R),!.
'キーボードから3個の実数(整数でない)値を1行に1組として計5組入力'(N,X) :-
        'キーボードから3個の実数(整数でない)値を1行に1組として計5組入力'(N,X).

入力の診断(Line,[V1,V2,V3]) :-
        split(Line,[' ',','],[V1,V2,V3]),
        real(V1),
        real(V2),
        real(V3),!.
入力の診断(Line,[V1,V2,V3]) :-
        write_formatted('%tは実数を3個(間をスペースであける)になっていません',[Line]),
        fail.

'問1で作ったファイルから実数値を読み込み、総合計と各組の実数の平均を求める。'(_総合計,_各組の実数の平均) :-
        get_lines('data1.txt',Lines),
        総合計の取得(Line,_総合計),
        各組の平均の取得(Lines,_各組の実数の平均).

総合計の取得(Lines,_総合計) :-
        findsum(_各行の合計,(
                    member(Line,Lines),
                    split(Line,[','],[V1,V2,V3]),
                    _各行の合計 is V1+V2+V3),
                _総合計).

各組の平均の取得(Lines,_各組の実数の平均ならび) :-
        findall(_各組の実数の平均,(
                    member(Line,Lines),
                    split(Line,[','],[V1,V2,V3]),
                    _各組の実数の平均 is (V1+V2+V3) / 3),
                _各組の実数の平均ならび).