文字列置換
文字列置換をどうしようかと思って、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
すごい冗長な気がするけど・・取り敢えず正常に動作するっぽい。
# 追記
・・・間違いがあったのでコメント参照。ありがとうございます。