このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1289913298/831
#  2. 引数に指定した複数のテキストファイルの内容を結合して,  
#  一つのファイルにまとめるコマンド(catfilesという名称とする)を作成せよ.  
#  ただし,まとめた内容を格納するファイル名は,“concat.txt”とすること.  
#  ただし,catコマンドをsystem関数の内部で呼ぶような構成は認めない.  
#  システムコールとしては,open,close,read,writeを用いること.  
#  また,結合してまとめた結果を格納するファイルが存在しない場合には,  
#  creatシステムコールを用いて生成すること.  
#   
#  実行  
#  $ catfiles aaa.txt bbb.txt ccc.txt …  
#   
#  

program :-
        '引数に指定した複数のテキストファイルの内容を結合して,一つのファイルにまとめるコマンド(catfilesという名称とする)を作成する。ただし,まとめた内容を格納するファイル名は,“concat.txt”とるすこと',
        halt.

'引数に指定した複数のテキストファイルの内容を結合して,一つのファイルにまとめるコマンド(catfilesという名称とする)を作成する。ただし,まとめた内容を格納するファイル名は,“concat.txt”とすること' :-
        '引数に指定した複数のテキストファイルの内容を'(_ファイルならび),
        'まとめた内容を格納するファイル名は,"concat.txt"とする'(Outstream),
        '結合して,一つのファイルにまとめる'(_ファイルならび,Outstream).

'引数に指定した複数のテキストファイルの内容を'(_ファイルならび) :-
        user_parameters([catfiles|_ファイルならび]).

'まとめた内容を格納するファイル名は,"concat.txt"とする'(Outstream) :-
        open('concat.txt',write,Outstream,[type(binary)]).

'結合して,一つのファイルにまとめる'([],Outstream) :-
        close(Outstream),!.
'結合して,一つのファイルにまとめる'([_ファイル|R],Outstream) :-
        file_test(_ファイル,read),
        open(_ファイル,read,Instream,[type(binary)]),
        get_byte(Instream,Code),
        バイナリコピー(Instream,Outstream,Code),
        '結合して,一つのファイルにまとめる'(R,Outstream),!.
'結合して,一つのファイルにまとめる'([_ファイル|_],Outstream) :-
        write_formatted('オープンファイルエラーが発生しました ファイル名=%q\n',[_ファイル]),
        write('結合を中止します\n'),
        close(Outstream),!.

バイナリコピー(Instream,Outstream,(-1)) :- !.
バイナリコピー(Instream,Outstream,Code) :-
        put_byte(Outstream,Code),
        get_byte(Instream,Code2),
        バイナリコピー(Instream,Outstream,Code2).