【发布时间】:2016-03-20 23:21:10
【问题描述】:
如何用字符串中的多个字符替换一个字符。 我可以用下面的另一个字符替换一个字符:
replaceO [] = []
replaceO (x:xs) =
if x == '('
then '\n' : replaceO xs
else x : replaceO xs
但我想用“\n\t\t”替换'(',而不仅仅是'\n'。
--------- 更新 -------------- 根据下面的答案,我可以把它变成一个接受字符串并返回这样的字符串的函数:
ReplaceFun str :: String -> String
ReplaceFun str = do
concatMap (\str -> if str == '.' then "foo" else [str])
这不起作用,有人可以指出我的错误吗?我对 Haskell 很陌生。
这是嵌套缩进的内容:
replaceO (x:xs) n l =
if x == '('
then "\n" ++ (showTabs n "-") ++ replaceO xs (n + 1) 'l'
else
if x == ')'
then "\n" ++ (showTabs n "-") ++ replaceO xs (n - 1) 'l'
else x : replaceO xs n 'l'
【问题讨论】:
-
你没有给
concatMap足够的参数-replaceFun的右轴(也注意小写)应该是String类型,但concatMap (\str -> if str == '.' then "foo" else [str])的类型是String -> String。你可能想要replaceFun = concatMap (\str -> if str == '.' then "foo" else [str])