ログ日記

作業ログと日記とメモ

文字列置換

文字列置換をどうしようかと思って、Text.RegexのsubRegex関数を使えばいいんじゃないかと思ったけど何故か使えない。

Variable not in scope: `subRegex'

と言われる。

他の正規表現関数は使えるのに・・バージョンの違いなのかな。


しばらく考えて、正規表現を使わなくても普通に文字列置換すればいいことに気付く。
が、文字列置換の関数が分からない・・。


最強のパーザー、Parser Combinator - 純粋関数型雑記帳

どうやら自分で定義しなければいけないらしい。
この辺のリスト操作がすらすらっと書ければ非常に強力だろうけど、ぱっと思い付くことができない。。
慣れもあるんだろうけど、、頭の体操のパズルみたいだ。




# 追記

上のURLのソースはエラーで使えなかった・・。
ので自分で書いてみた。

replace :: String -> String -> String -> String
replace x y str = inner str
    where
      inner [] = []
      inner (s:ss)
          | isPrefixOf x ss = s:((++) y $ inner $ drop (length x) ss)
          | otherwise = s:inner ss

すごい冗長な気がするけど・・取り敢えず正常に動作するっぽい。


# 追記

・・・間違いがあったのでコメント参照。ありがとうございます。