将元组列表转换为两个单元素元组列表

时间:2014-12-02 17:51:28

标签: haskell

在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) 

知道我做错了吗?

1 个答案:

答案 0 :(得分:4)

unpair xs的类型为([a], [b]),因此您无法将某个元素添加到列表中。但是你可以使用let语句来模式匹配unpair xs的结果,然后使用添加到每个元素的新head元素构造元组。

我不会引用实际答案,因为这看起来像家庭作业。


第二个实现的原因是因为unpair [(a,b)]->[a]的类型是{{1}}。