このディレクトリの索引

#  正規表現だと、「当てはまる一部分を交換」ってのはやれるけど、
#  「当てはまる部分を含む一行を丸ごと交換」だと難しい。\
#  っつーか思いつかんかった。やり方を。

当てはまる部分を含む一行を丸ごと交換(_文字列,_検索部分文字列,_置換行,_置換された文字列) :-
        atom_chars(_文字列,Chars),
        atom_chars(_検索部分文字列,_検索部分文字ならび),
        atom_chars(_置換行,_置換文字ならび),
        当てはまる行を丸ごと交換(Chars,_検索部分文字ならび,_置換文字ならび,Chars2),
        concat_atom(Chars2,_置換された文字列),!.

当てはまる行を丸ごと交換([],[],_検索部分文字ならび,_置換文字ならび,[]) :- !.
当てはまる行を丸ごと交換([],L1,_検索部分文字ならび,_置換文字ならび,L1) :-
        \+(append(_,_検索部分文字ならび,_,L1)),!.
当てはまる行を丸ごと交換([],L1,_検索部分文字ならび,_置換文字ならび,_置換文字ならび) :-
        append(_,_検索部分文字ならび,_,L1),!.
当てはまる行を丸ごと交換(['\n'|R1],[],_検索部分文字ならび,_置換文字ならび,['\n'|R2]) :-
        当てはまる行を丸ごと交換(R1,[],_検索部分文字ならび,_置換文字ならび,R2).
当てはまる行を丸ごと交換(['\n'|R1],L1,_検索部分文字ならび,_置換文字ならび,Chars2) :-
        append(_,_検索部分文字ならび,_,L1),
        当てはまる行を丸ごと交換(R1,[],_検索部分文字ならび,_置換文字ならび,R2),
        append(_置換文字ならび,['\n'|R2],Chars2),!.
当てはまる行を丸ごと交換(['\n'|R1],L1,_検索部分文字ならび,_置換文字ならび,Chars2) :-
        \+(append(_,_検索部分文字ならび,_,L1)),
        当てはまる行を丸ごと交換(R1,[],_検索部分文字ならび,_置換文字ならび,R2),
        append(L1,['\n'|R2],Chars2),!.
当てはまる行を丸ごと交換([A|R1],L1,_検索部分文字ならび,_置換文字ならび,Chars2) :-
        \+(A='\n'),
        append(L1,[A],L2),
        当てはまる行を丸ごと交換(R1,L2,_検索部分文字ならび,_置換文字ならび,Chars2).