このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1322562648/556
#  [1] 授業単元: C言語 
#  [2] 問題文(含コード&リンク): 
#  氏名、体重、身長の入力を受けつけ、ファイル 
#  に書き込むプログラムをかけ。 
#  

'氏名、体重、身長の入力を受けつけ、ファイルに書きこむ'(_ファイル) :-
        '氏名、体重、身長の入力を受けつけ'(_氏名,_体重,_身長),
        ファイルに書きこむ(_ファイル,_氏名,_体重,_身長).

'氏名、体重、身長の入力を受けつけ'(_氏名,_体重,_身長) :-
        氏名の入力(_氏名),
        体重の入力(_体重),
        身長の入力(_身長).

氏名の入力(_氏名) :-
        get_line(_氏名).

体重の入力(_体重) :-
        get_line(Line),
        体重入力診断(Line,_体重),!.
体重の入力(_体重) :-
        体重の入力(_体重).

体重入力診断(Line,_体重) :-
        atom_to_term(Line,_体重,_),
        number(_体重),
        _体重 > 0,!.
体重入力診断(Line,_体重) :-
        writef('入力された %t からは適切な体重が得られません。再入力をお願いします。\n'),
        fail.

身長の入力(_身長) :-
        get_line(Line),
        身長入力診断(Line,_身長),!.
身長の入力(_身長) :-
        身長の入力(_身長).

身長入力診断(Line,_身長) :-
        atom_to_term(Line,_身長,_),
        number(_身長),
        _身長 > 0,!.
身長入力診断(Line,_身長) :-
        writef('入力された %t からは適切な身長が得られません。再入力をお願いします。\n'),
        fail.

ファイルに書きこむ(_ファイル,_氏名,_体重,_身長) :-
        open(_ファイル,write,Outstream),
        writef(Outstrem,'氏名は %q \n体重は %t Kg\n身長は %t cm\n',[_氏名,_体重,_身長]),
        close(Outstream).