このディレクトリの索引
#  http://hibari.2ch.net/test/read.cgi/tech/1272006124/207
#  http://beebee2see.appspot.com/i/azuY_PuCBAw.jpg
#  (1) データ入力と登録。 および、 名前.pl へ書きこむ。
#  ?- qaData.
#  名前:| 太郎.
#      身長:| 176.
#      体重:| 75.
#      住所:| 大津市.
#
#  yes.
#  ?- qaData.
#  ...
#  .
#  .
#  ?- putOutFile('名前.pl').
#  yes
#  
#  (2) 繰り返しモードで
#  ?- rqaDAta.
#  名前:| 太郎.
#      身長:| 176.
#      体重:| 75.
#      住所:| 大津市.
#  名前:| 次郎.
#      身長:| 167.
#      ...
#      ...
#  名前:| end.
#  aouputFile:| '名前.pl'.
#  writing ...
#  yes
#

qaData :-
        write(名前),
        read(_名前),
        write('\t身長'),
        read(_身長),
        write('\t体重'),
        read(_体重),
        write('\t住所'),
        read(_住所),
        assertz(名前(_名前,_身長,_体重,_住所)).

putOutputfile(_ファイル) :-
        tell(_ファイル),
        putOutputfile_0,
        told.

putOutputfile_0 :-
        clause(名前(_名前,_身長,_体重,_住所),_),
        writef('%q.\n',[名前(_名前,_身長,_体重,_住所)]),
        fail.
putOutputfile_0.

putOutputfile_1(Outstream) :-
        write('writing ... \n'),
        clause(名前(_名前,_身長,_体重,_住所),_),
        writef(Outstream,'%q.\n',[名前(_名前,_身長,_体重,_住所)]),
        fail.
putOutputfile_1(_).

rqaData :-
        write(名前),
        read(_名前),
        rqaData(_名前),
        write('aouputFile:|'),
        read(_ファイル名),
        open(_ファイル名,append,Outstream),
        putOutput_1(Outstream),
        close(Outstream).                

rqaData(end) :- !.
rqaData(_名前) :-
        write('\t身長'),
        read(_身長),
        write('\t体重'),
        read(_体重),
        write('\t住所'),
        read(_住所),
        assertz(名前(_名前,_身長,_体重,_住所)),
        write(名前),
        read(_名前_2),
        rqaData(_名前_2).        

%
%  clause/2 のない処理系では        名前(_名前,_身長,_体重,_住所), で処理する。
%  この場合は副作用を伴わないから、これでも問題はない。
%  既に存在するファイルへの追加書き込み(appendモード)はopen/3を使わざるを
%  得ないが、このモードでは listing(名前) が使えない。
%  何故か標準Prolog処理系の組込述語には、ストリームモードのlisting/2がない。
%  それで、ここではlistingを使わずに、自分で節の読み出し書き込みを行うこととした。
%  繰り返しは先読みを使った。先読みせずにも定義可能だが、
%  終了条件がすっきり定義できるので、普通はこのパターンを使う。
%  
%  題意を取り間違えたか!!  appendモードでオープンしなくてもよいなら、

rqaData :-
        write(名前),
        read(_名前),
        rqaData(_名前),
        write('aouputFile:|'),
        read(_ファイル名),
        tell(_ファイル名),
        putOutput_0,
        told.                

%  で良いし、そもそも

rqaData :-
        write(名前),
        read(_名前),
        rqaData(_名前),
        write('aouputFile:|'),
        read(_ファイル名),
        write('writing ... \n'),
        tell(_ファイル名),
        listing(名前),
        told.                

%  で良いことになる。