このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1289913298/525
#  [1] 授業単元:情報検索処理  
#  [2] 問題文(含コード&リンク):以下の仕様を満たすプログラムを作成してください。 
#  ・文章の書かれたテキストファイルを読み込み、文字列を入力して検索する。 
#  ・検索した文字列がある箇所全てに対して、その文字列と前後10文字を、検索結果として別のテキストファイルに書き込む。  
#  

'文章の書かれたテキストファイルを読み込み、文字列を入力して検索する。検索した文字列がある箇所全てに対して、その文字列と前後10文字を、検索結果として別のテキストファイルに書き込む。' :-
        '文章の書かれたテキストファイルを読み込み'(_テキストファイル,Chars),
        '文字列を入力して'(_検索文字列),
        atom_chars(_検索文字列,_検索文字ならび),
        '検索する。検索した文字列がある箇所全てに対して、その文字列と前後10文字を、検索結果として'(Chars,_検索文字ならび,_検索結果ならび),
        '別のテキストファイルに書き込む'(_出力ファイル,_検索結果ならび).

'文章の書かれたテキストファイルを読み込み'(_テキストファイル,Chars) :-
        get_chars(_テキストファイル,Chars).

'文字列を入力して'(_検索文字列) :-
        write('検索文字列を入力してください : '),
        get_line(_検索文字列).

'検索する。検索した文字列がある箇所全てに対して、その文字列と前後10文字を、検索結果として'(Chars,_検索文字列,_検索した前10文字・後ろ10文字ならび) :-
        atom_chars(_検索文字列,_検索文字ならび),
        findall([_位置,_検索文字列,_前10文字,_後10文字],(
                      検索する(Chars,_検索文字ならび,L0,L1),
                      検索位置は(L0,_位置),
                      前10文字(L0,_前10文字),
                      後10文字(L1,_後10文字)),
                _検索した前10文字・後ろ10文字ならび).

検索する(Chars,_検索文字ならび,L0,L1) :-
        append(L0,_検索文字ならび,L1,Chars).

検索位置は(L0,_位置) :-
        length(L0,Len),
        _位置 is Len + 1,!.

前10文字(L0,_前10文字) :-
        length(_前10文字ならび,10),
        append(_,_前10文字ならび,L0),
        atom_chars(_前10文字,_前10文字ならび).

後10文字(L0,_後10文字) :-
        length(_後10文字ならび,10),
        append(_後10文字ならび,L1).
        atom_chars(_後10文字,_後10文字ならび),!.


'別のテキストファイルに書き込む'(_出力ファイル,_検索結果ならび) :-
        open(_出力ファイル,write,Outstream),
        append(_,[[_位置,_検索文字列,_前10文字,_後10文字]|R],_検索結果ならび),
        write_formatted(Outstream,'%t:%t,%t,%t\n',[_位置,_検索文字列,_前10文字,_後10文字]),
        R = [],
        close(Outstream),!.