Haskell 用字符串替换字符串中的字符

Haskell Replace characters in string with string

这是这个问题的扩展:Haskell replace characters in string

我想调整以下表达式以用字符串替换字符

let replaceO = map (\c -> if c=='O' then 'X'; else c)

最终得到如下结果(XX可以是任意长度的字符串):

replaceO "HELLO WORLD"
"HELLXX WXXRLD"

你可以根据条件从遍历和累加的角度来表述你的问题,像这样,

replace :: String -> Char -> String -> String
replace xs c s = foldr go [] xs

 where go x acc = if x == c  then acc ++ s
                             else acc ++ [x]

以你为例:

>replace "HELLO WORLD" 'O' "XXX" 
> "HELLXXX WXXXRLD"

您可以使用 concatMap:

let replace0 = concatMap (\c -> if c=='O' then "X" else "XX")