このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1325685876/129
#  [1] 授業単元:計算機アルゴリズム(ファイルへの追加書込み) 
#  [2] 問題文(含コード&リンク):一言日記をファイルに書き込むプログラムを作成した 
#  い.以下の要件を満たすプログラムを作成せよ. 
#  実行例 
#  一言日記ファイル名:test.txt 
#  ファイルがありません。新規作成しますか(Yes…1 / 
#  No…0):0 
#  プログラムを終了します。 
#  (以下,diary.txt に既に日記が書かれているとする) 
#  % cat diary.txt 
#  2011 年12 月6 日12 時23 分来週中間テスト 
#  2011 年12 月13 日10 時35 分これからテスト! 
#  2011 年12 月16 日9 時40 分風邪ひいた 
#   
#  一言日記ファイル名:diary.txt 
#  ファイルが見つかりました。追記しますか(Yes…1 / 
#  No…0):1 
#  日記の文字列を入力:プログラミング演習中 
#  % cat diary.txt 
#  2011 年12 月6 日12 時23 分来週中間テスト 
#  2011 年12 月13 日10 時35 分これからテスト! 
#  2011 年12 月16 日9 時40 分風邪ひいた 
#  2011 年12 月22 日14 時28 分プログラミング演習中 
#   
# 
# 

'一言日記をファイルに書き込む'(_一言日記ファイル) :-
        exists_file(_一言日記ファイル),
        write('ファイルが見つかりました。追記しますか(Yes…1\nNo…0):'),

        get_line(Line),
        '一言日記をファイルに追記'(Line,_一言日記ファイル),!.
'一言日記をファイルに書き込む'(_一言日記ファイル) :-
        write('ファイルがありません。新規作成しますか(Yes…1\nNo…0):'),
        get_line(Line),
        新規作成書き込み(Line,_一言日記ファイル),!.

新規作成書き込み('0',_) :- !.
新規作成書き込み('1',_一言日記ファイル) :-
        write('日記の文字列を入力:'),
        open(_一言日記ファイル,write,Outstream),
        'eofになるまで書き込み'(Outstream),
        close(Outstream).

'一言日記をファイルに追記'('0',_) :- !.
'一言日記をファイルに追記'('1',_一言日記ファイル) :-
        write('日記の文字列を入力:'),
        open(_一言日記ファイル,append,Outstream),
        'eofになるまで書き込み'(Outstream),
        close(Outstream).

'eofになるまで書き込み'(Outstream) :-
        at_end_of_stream(current_input),!.
'eofになるまで書き込み'(Outstream) :-
        get_line(Line),
        writef(Outstream,'%t\n',[Line]),
        'eofになるまで書き込み'(Outstream).

get_line(Line) :-
        get_char(Char),
        get_line(Char,Chars),
        atom_chars(Line,Chars).

get_line('\n',[]) :- !.
get_line(Char,[Char|R]) :-
        get_char(Char2),
        get_line(Char2,R).