このディレクトリの索引
http://pc12.2ch.net/test/read.cgi/tech/1274121477/320
#  日本語文章中の複数の単語を置換したいです。 
#  ファイルは一つのディレクトリに複数あります。 
#  >http://ime.nu/www.machu.jp/diary/20070224.html#p01 
#  ファイル検索はcygwin かlinux上なので上記を参考にしています。 
#  trではうまくいきませんでした。 
#   
# お題
# 
# 拡張子が .rb の全てのファイルに対して、
# 
# #!/usr/bin/env ruby
# 
# を
# 
# #!/usr/local/bin/ruby
# 
# に置換する。ついでに、「ruby」という文字を「perl」に置き換える

'拡張子が .rb の全てのファイルに対して、#!/usr/bin/env ruby を #!/usr/local/bin/ruby  に置換する。ついでに、「ruby」という文字を「perl」に置き換える' :-
        shs('ls -N *.cs',Files),
        append(_,[File|R],Files),
        get_lines(File,Lines),
        指定された内容に文字列を置換する(Lines,Lines2),
        put_lines(File,Lines2),
        R = [].

指定された内容に文字列を置換する([],[]) :- !.
指定された内容に文字列を置換する([Line|R1],[Line2|R2]) :-
        sub_atom(Line,_,_,_,A1,'#!/usr/bin/env ruby',A3,L1,L2,L3),
        concat_atom([A1,'#!/usr/local/bin/ruby',A3],Line1),
        rubyをperlに置換する(Line1,Line2),        
        指定された内容に文字列を置換する(R1,R2),!.
指定された内容に文字列を置換する([Line|R1],[Line2|R2]) :-
        rubyをperlに置換する(Line,Line2),        
        指定された内容に文字列を置換する(R1,R2).

rubyをperlに置換する(Line,Line2) :-
        replace_all(Line,ruby,perl,Line2).

% replace_all/3は http://nojiriko.asia/prolog/replace_atom.html 参照