このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1307166756/341
#  [よろしくお願いします・・(´・ω・`) 
#   
#  1] 授業単元: プログラミング 
#  [2] 問題文(含コード&リンク):  
#  整数aとbを入力すると、mylife.txt という名前のファイルを作り、その中にa+bの計算結果を記録する処理と、 
#  続いてそのファイルを開いてデータを読み込み、ディスプレイ上に表示する処理をするプログラムを作りなさい。 
#  (実行後mylife.txt の中身は 
#   
#  126 
#   
#  とだけ書かれている) 
#   
#  http://ime.nu/uproda.2ch-library.com/387865yc9/lib387865.jpg 
#  実行例です。 
#   
#  http://ime.nu/uproda.2ch-library.com/387863Wqm/lib387863.jpg 
#  ここまで出来て居ます 
#  

'整数aとbを入力すると、mylife.txt という名前のファイルを作り、その中にa+bの計算結果を記録する処理と、続いてそのファイルを開いてデータを読み込み、ディスプレイ上に表示する処理をする' :-
        '整数aとbを入力すると、mylife.txt という名前のファイルを作り、その中にa+bの計算結果を記録する',
        続いて,
        _そのファイル = 'mylife.txt',
        そのファイルを開いてデータを読み込み、ディスプレイ上に表示する(_そのファイル).

'整数aとbを入力すると、mylife.txt という名前のファイルを作り、その中にa+bの計算結果を記録する' :-
        整数aとbを入力すると(_a,_b),
        'mylife.txt という名前のファイルを作り'(Outstream),
        'a+bの計算結果を'(_a,_b,_計算結果),
        記録する(Outstream).

整数aとbを入力すると(_a,_b) :-
        整数aを入力する(_a),
        整数bを入力する(_b).

整数aを入力する(_a) :-
        write('整数を入力してください : '),
        get_integer(_a).

整数bを入力する(_b) :-
        write('整数を入力してください : '),
        get_integer(_b).

'mylife.txt という名前のファイルを作り'(Outstream) :-
        open('mylife.txt',write,Outstream),!.

'a+bの計算結果を'(_a,_b,_計算結果) :-
        _計算結果 is _a + _b.

記録する(Outstream,_計算結果) :-
        writef(Outstream,'%t\n',[_計算結果]),
        close(Outstream).

続いて :- true.

そのファイルを開いてデータを読み込み、ディスプレイ上に表示する(_そのファイル) :-
        そのファイルを開いて(_そのファイル,Instream),
        データを読み込み(Instream,_データ),
        ディスプレイ上に表示する(Instream,_データ).

そのファイルを開いて(_そのファイル,Instream) :-
        open(_そのファイル,read,Instream).

データを読み込み(Instream,_データ) :-
        get_lines(Instream,_データ),
        close(Instream).

ディスプレイ上に表示する(_データ) :-
        put_lines(_データ).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

get_lines(Stream,Lines) :-
        is_stream(Stream),
        get_chars(Stream,Chars),
        chars_lines(Chars,Lines),!.

get_lines(File,Lines) :-
        atom(File),
        exitst(File,read),
        get_chars(File,L),
        chars_lines(L,Lines),!.

get_chars(Input,end_of_file,[]) :- !.
get_chars(Input,X,[X|R]) :-
        get_char(Input,Y),
        get_chars(Input,Y,R).

get_chars(File,L) :-
        \+(is_stream(_,File,_)),
        slush_op(File,File_1),
        exists(File_1,read),
        open(File_1,read,Input),
        get_char(Input,X),
        get_chars(Input,X,L),
        close(Input),!.
get_chars(Input,L) :-
        is_stream(_,Input,_),
        get_char(Input,X),
        get_chars(Input,X,L),!.

% *** user: chars_lines / 3 ***
chars_lines([],[],[]) :- !.
chars_lines(['\r'],[],[]) :- !.
chars_lines(['\r',A|R],[],[A|R]) :-
        \+(A = '\n'),!.
chars_lines(['\r','\n'|R],[],R) :- !.
chars_lines(['\n'|R],[],R) :- !.
chars_lines([A|R1],[A|R2],Z) :-
        chars_lines(R1,R2,Z).

% *** user: chars_lines / 2 ***
chars_lines([],[]) :- !.
chars_lines(L,[A|R2]) :-
        chars_lines(L,U,R),
        concat_atom(U,A),
        chars_lines(R,R2).

% *** user: put_lines / 2 ***
put_lines(_,[]) :- !.
put_lines(Output,[Line|R]) :-
        is_stream(Output),
        write(Output,Line),
        write(Output,'\n'),
        put_lines(Output,R),!.
put_lines(File,L) :-
        \+(is_stream(File)),
        open(File,write,Output),
        put_lines(Output,L),
        close(Output),!.

% *** user: put_lines / 1 ***
put_lines(Lines) :-
        append(_,[Line|R],Lines),
        write_formatted('%t\n',[Line]),
        R = [],!.

% *** user: get_integer / 2 ***
get_integer(Input,N) :-
        get_line(Input,Line),
        get_integer_1(Input,Line,N),!.

% *** user: get_integer / 1 ***
get_integer(N) :-
        get_line(Line),
        get_integer_1(Line,N),!.

% *** user: get_integer_1 / 3 ***
get_integer_1(_,end_of_file,_) :-
        !,
        fail.
get_integer_1(Input,Line,N) :-
        atom_to_term(Line,N,_),
        integer(N),!.
get_integer_1(Input,_,N) :-
        get_line(Input,Line),
        get_integer_1(Input,Line,N) .

% *** user: get_integer_1 / 2 ***
get_integer_1(end_of_file,_) :-
        !,fail.
get_integer_1(Line,N) :-
        atom_to_term(Line,N,_),
        integer(N),!.
get_integer_1(_,N) :-
        get_line(Line),
        get_integer_1(Line,N).