このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1322562648/903
#  [1] 授業単元:計算機アルゴリズムファイルへの書き込み 
#  [2] 問題文(含コード&リンク):以下の実行例のように、キーボードから友人の名前(文字列)と生年月日(yyyymmdd形式のlong型変数) 
#  を次々と読み込んで、そのデータをファイルに書きこむプログラムを作成せよ。 
#   
#  以下の要件を満たすとする 
#  ・書きこむのファイル名をユーザに入力させる 
#  ・同じ名前の友人の情報がすでに入力されたかどうかは確認しなくても良い。 
#  ・同じ名前のファイルはすでに存在する場合には、内容を上書きするものとする。 
#  ・作成されたファイルの中身は以下の実行例(catコマンドの結果)のようにするものとする。 
#  ・以下の実行例のように,1人文のデータを入力するごとに「続けますか(yse...1/NO...0:)」のように表示を促し1が入力されたら処理を続けるプログラムとする。 
#   
#  [5] その他の制限:[実行例] 
#  書きこむファイル名:friends.txt 
#  友人の名前:Goro 
#  誕生日(yyyymmdd):19911001 
#  続けますか?(yes...1/NO...0):1 
#  友人の名前:Taro 
#  誕生日(yyyymmdd):19890505 
#  続けますか?(yes...1/NO...0):1 
#  友人の名前:Akira 
#  誕生日(yyyymmdd):19920222 
#  続けますか?(yes...1/NO...0):0 
#   
#  %cat freinds.txt 
#  Goro 19911001 
#  Taro 19890505 
#  Akira 19920222 
#  宜しくお願いします。 
# 

'キーボードから友人の名前(文字列)と生年月日(yyyymmdd形式のlong型変数)を次々と読み込んで、そのデータをファイルに書きこむ'(_ファイル) :-
        'キーボードから友人の名前(文字列)と生年月日(yyyymmdd形式のlong型変数)を次々と読み込んで'(_名前_生年月日ならび),
        'そのデータをファイルに書きこむ'(_ファイル,_名前_生年月日ならび).

'キーボードから友人の名前(文字列)と生年月日(yyyymmdd形式のlong型変数)を次々と読み込んで'(_名前_生年月日ならび) :-
        友人の名前を読み込む(_友人の名前),
        生年月日を読み込む(_生年月日),
        続行するか終了するか問う(_答え),
        'キーボードから友人の名前(文字列)と生年月日(yyyymmdd形式のlong型変数)を次々と読み込んで'(_答え,_友人の名前,_生年月日,_名前_生年月日ならび).

'キーボードから友人の名前(文字列)と生年月日(yyyymmdd形式のlong型変数)を次々と読み込んで'(0,[]).
'キーボードから友人の名前(文字列)と生年月日(yyyymmdd形式のlong型変数)を次々と読み込んで'(_,_友人の名前,_生年月日,[[_友人の名前,_生年月日]|R]) :-
        友人の名前を読み込む(_友人の名前_2),
        生年月日を読み込む(_生年月日_2),
        続行するか終了するか問う(_答え),
        'キーボードから友人の名前(文字列)と生年月日(yyyymmdd形式のlong型変数)を次々と読み込んで'(_答え,_友人の名前_2,_生年月日_2,R).

友人の名前を読み込む(_友人の名前) :-
        write('友人の名前:'),
        get_line(_友人の名前).

生年月日を読み込む(_生年月日) :-
        write('誕生日(yyyymmdd):'), 
        get_line(_生年月日).

続行するか終了するか問う(_答え) :-
        write('続けますか?(yes...1/NO...0):'),
        get_line(Line),
        続行するか終了するか診断(Line,_答え),!.
続行するか終了するか問う(_答え) :-
        続行するか終了するか問う(_答え).

続行するか終了するか診断(Line,_答え) :-
        atom_to_term(Line,_答え,_),
        integer(_答え),
        _答え >= 0,
        _答え =< 1,!.
続行するか終了するか診断(Line,_答え) :-
        fail.

'そのデータをファイルに書きこむ'(_ファイル,_名前_生年月日ならび) :-
        open(_ファイル,write,Outstream),
        append(_,[[_友人の名前,_生年月日]|R],_名前_生年月日ならび),
        writef('%t %t\n',[_友人の名前,_生年月日]),
        R = [],
        close(Outstream).