连接到一个字符串列表,另一个字符串

时间:2018-11-24 17:30:57

标签: string list haskell concat

下面的代码返回一个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))])

1 个答案:

答案 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)