下面的代码返回一个String列表,但我希望它在多种情况下都可以使用。问题是我无法通过递归创建相同的确切结果。 该程序将返回以下结果:
replaceTabs 6 ["\thello world"]
=> [" hello world"]
现在这应该可以使用更长的列表,例如:
replaceTabs 6 ["asd dsa","\thello world"]
=> ["asd dsa"," hello world"]
简单的concat无效,因为它将返回未定义的模式。
replaceTab' :: Int -> [[Char]] -> [Char]
replaceTab' n [[x]] =
if x == '\t' then replicate n ' '
else [x]
replaceTabs :: Int -> [String]-> [String]
replaceTabs n [""] = [""]
replaceTabs n (x:xs) = (return . concat $ [replaceTab' n [a] | a <- (map (:[]) (x))])
答案 0 :(得分:3)
此
replaceTab' :: Int -> [[Char]] -> [Char]
与
相同replaceTab' :: Int -> [String] -> String
您应该重点关注的是实现函数
replaceTab :: Int -> String -> String
“修复”单个String
。那么replaceTabs
就是
replaceTabs :: Int -> [String] -> [String]
replaceTabs n = map (replaceTab n)