【问题标题】:Convert list op tuples into two lists of one-elemnt tuple将元组列表转换为两个单元素元组列表
【发布时间】:2014-12-02 17:51:28
【问题描述】:

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

知道我做错了什么吗?

【问题讨论】:

  • unpair 返回一个pair,而不是一个列表。因此,您的两个示例都是错误的。使用case .. of (x,y) -> let (x,y)=... in 访问一对的组件。

标签: haskell


【解决方案1】:

unpair xs 的类型是([a], [b]),因此您不能像添加列表一样向其添加元素。但是您可以使用let 语句对来自unpair xs 的结果进行模式匹配,然后构造元组并将新的头元素添加到每个元组中。

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


第二个实现起作用的原因是因为unpair的类型是[(a,b)]->[a]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-20
    • 1970-01-01
    • 2015-02-13
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    • 2022-11-18
    相关资源
    最近更新 更多