Haskell将字符串列表转换为带有分隔符“|”的字符串

时间:2017-02-21 06:35:12

标签: haskell

如何使用foldl'将列表转换为带分隔符“|”的字符串?

ltos :: String -> [String] -> String
ltos  []    = ""
ltos  (m:n) = foldl' f acc xs
   where
     f a b          = 
     acc            = 
     xs             = 

例如,

ltos ["a", "b", "c"]

会输出

"a|b|c"

2 个答案:

答案 0 :(得分:3)

这是一种方式:

foldl' (\acc x -> if (null acc) then acc ++ x else acc ++ "|" ++ x) [] ["a", "b", "c"]

第一次累加器为空,所以只需从列表中追加第一个字符串。此后,在变量前附加分隔符。如果您运行scanl,您可以看到正在构建的字符串如下:

["","a","a|b","a|b|c"]

答案 1 :(得分:3)

这是模式匹配和HOF的可爱组合。

ltos :: [String] -> String
ltos []    = ""
ltos (m:n) = foldl' (\a b -> a ++ "|" ++ b) m n

您使用列表的第一个元素作为起始字符串,然后折叠其余元素(在每个元素之间添加|)。

(我假设您将签名错误输入ltos)。