在haskell我尝试转换像[(1,2),(3,4),(5,6)]这样的列表 分为两个列表:[1,3,5]和[2,4,6]仅使用递归函数
我到目前为止尝试了这个,但它没有工作
unpair :: [(a,b)] -> ([a], [b])
unpair [] = []
unpair ((x,y):xs) = x : unpair(xs) y : unpair (xs)
然而,当我只尝试列出元组中的第一个值时,它确实有效:
unpair [] = []
unpair ((x,y):xs) = x : unpair(xs)
知道我做错了吗?
答案 0 :(得分:4)
unpair xs
的类型为([a], [b])
,因此您无法将某个元素添加到列表中。但是你可以使用let
语句来模式匹配unpair xs
的结果,然后使用添加到每个元素的新head元素构造元组。
我不会引用实际答案,因为这看起来像家庭作业。
第二个实现的原因是因为unpair
[(a,b)]->[a]
的类型是{{1}}。