【问题标题】:Converting a list of tuples to a tuple of lists recursively递归地将元组列表转换为列表元组
【发布时间】:2015-12-03 08:03:27
【问题描述】:

我需要一个递归函数,它从一个元组列表中返回一个列表元组。换句话说,它的类型签名是

func :: [(a,b)] -> ([a],[b])

这是一个例子:

λ> func [(1,3), (2,4)]
([1,2], [3,4])

我创建了两个函数来从元组中返回第一个和第二个元素的列表并将它们连接起来,但我只需要一个递归函数来完成它。

【问题讨论】:

    标签: list haskell tuples


    【解决方案1】:

    您正在寻找unzip

    unzip :: [(a, b)] -> ([a], [b])
    

    作为一般建议,当您知道类型签名并且想知道是否存在具有该类型签名的任何现有函数时,Hoogle 是一个不错的选择; searching for that type signature 发现 unzip 作为它的第一个也是唯一的结果。

    【讨论】:

    • 我能找到解压缩的实现吗?我搜索了它,但没有成功。
    • @AnimeBear:嗯,GHC 使用的实现可以通过单击我链接到的文档中unzip 标题右侧的“源”链接找到,它指向到this source。不过,这不是很有启发性。具有显式递归的实现可能类似于 unzip [] = []; unzip ((a,b):xs) = (a:as, b:bs) where (as,bs) = unzip xs
    猜你喜欢
    • 1970-01-01
    • 2015-02-13
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    • 2018-07-20
    • 2016-09-28
    • 2012-06-05
    相关资源
    最近更新 更多