我做串混:
main = do
first <- getLine
second <- getLine
print (zip first second)
结果:[('a','1'),('b','2'),('c','3')]
。
但我如何将结果与a1b2c3
联系起来?
答案 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"