如何使用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"
答案 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
)。