Concat嵌套列表到字符串,Haskell

时间:2014-12-10 08:12:46

标签: haskell

我做串混:

main = do
    first <- getLine
    second <- getLine
    print (zip first second)

结果:[('a','1'),('b','2'),('c','3')]

但我如何将结果与a1b2c3联系起来?

3 个答案:

答案 0 :(得分:3)

您必须执行以下操作:

1)将列表中的元组转换为单个字符串,可以由单个map执行。

2)连接整个列表

Prelude> let a = [('a','1'),('b','2'),('c','3')]
Prelude> let b = map (\(x,y) -> x : [y]) a
Prelude> b
["a1","b2","c3"]
Prelude> concat b
"a1b2c3"
Prelude> Prelude.foldl1' (++) b -- instead of concat you can do fold
"a1b2c3"

答案 1 :(得分:2)

您也可以在一个方便的行

中完成此操作
let a = [('a','1'),('b','2'),('c','3')]
uncurry ((. return) . (:)) =<< a

答案 2 :(得分:1)

如果我可以添加另一个(不必要的)答案,只是为了显示Haskell允许您思考和解决问题的多少(疯狂)方式:)

Prelude Data.List> let input = [('a','1'),('b','2'),('c','3')]
Prelude Data.List> let (l1,l2) = unzip input
Prelude Data.List> let alt_stream s1 s2 = head s1:head s2:alt_stream (tail s1) (tail s2)
Prelude Data.List> take (length l1 * 2) $ alt_stream (cycle l1) (cycle l2)
"a1b2c3"