List 使用列表理解将元组列表转换为列表

List 使用列表理解将元组列表转换为列表,list,haskell,list-comprehension,List,Haskell,List Comprehension,Haskell中是否有函数或方法可以帮助我获取元组列表,例如[1,2,3,4,5,6]和 返回[1,2,3,4,5,6]并使用列表理解 我专门搜索一个函数,它接受一个参数xs和 函数体中有一个列表理解。如果元组列表名为ts,我们可以执行两次迭代: [ t | (a, b) <- ts, t <- [a, b] ] 如果元组列表名为ts,我们可以执行两次迭代: [ t | (a, b) <- ts, t <- [a, b] ] 将给予 [1,2,3,4,5,6] 如果

Haskell中是否有函数或方法可以帮助我获取元组列表,例如[1,2,3,4,5,6]和 返回[1,2,3,4,5,6]并使用列表理解

我专门搜索一个函数,它接受一个参数xs和
函数体中有一个列表理解。

如果元组列表名为ts,我们可以执行两次迭代:

[ t | (a, b) <- ts, t <- [a, b] ]

如果元组列表名为ts,我们可以执行两次迭代:

[ t | (a, b) <- ts, t <- [a, b] ]
将给予

[1,2,3,4,5,6]
如果您不想使用concatMap,您可以这样做

concat . map (\(x, y) -> [x, y])
将给予

[1,2,3,4,5,6]
如果您不想使用concatMap,您可以这样做

concat . map (\(x, y) -> [x, y])

当然,您可以处理任何列表,甚至是列表中的元组列表。形式不同。你可以在前面的两个答案中看到,形式是a,b或x,y。这两者的意思相同。它们表示元组中的两个元素。处理元组表单的问题是,输出是单独的两项列表。这就是为什么concat如此有价值

我非常喜欢列表理解,上面给出了用列表理解将任何类型的列表展平的经典形式

我对Haskell比较陌生,很难理解folds如何生成一个列表,而不是像sum或product这样的单个值

像这样的问题非常宝贵,因为它们帮助我理解

此文件的foldr版本将生成一个列表。你想要的清单。为什么它是一个列表而不是一个值?这是因为foldr产生了一系列越来越大的列表,最后一个最大的列表就是答案

下面是用于展平元组列表的函数的foldr版本

foldr (\(a,b) l-> a:b:l) []    [(1,2),(3,4),(5,6)]

[1,2,3,4,5,6]

当然,您可以处理任何列表,甚至是列表中的元组列表。形式不同。你可以在前面的两个答案中看到,形式是a,b或x,y。这两者的意思相同。它们表示元组中的两个元素。处理元组表单的问题是,输出是单独的两项列表。这就是为什么concat如此有价值

我非常喜欢列表理解,上面给出了用列表理解将任何类型的列表展平的经典形式

我对Haskell比较陌生,很难理解folds如何生成一个列表,而不是像sum或product这样的单个值

像这样的问题非常宝贵,因为它们帮助我理解

此文件的foldr版本将生成一个列表。你想要的清单。为什么它是一个列表而不是一个值?这是因为foldr产生了一系列越来越大的列表,最后一个最大的列表就是答案

下面是用于展平元组列表的函数的foldr版本

foldr (\(a,b) l-> a:b:l) []    [(1,2),(3,4),(5,6)]

[1,2,3,4,5,6]

你可以查看这篇文章的可能副本。你可以查看这篇文章的可能副本。顺便说一句,无点版本会更清晰,因为不需要修改:。第二:[]=顺便说一句,无点版本会更清晰,因为它是未经修改的:。第二:[]=concatMap在数据中定义。可折叠,因此必须导入。concat.map在不导入的情况下也能正常工作。@fpmora Hoogle说它也在基础前奏曲my bad中。我想不是。很高兴知道,谢谢。concatMap是在数据中定义的。可折叠,因此必须导入。concat.map在不导入的情况下也能正常工作。@fpmora Hoogle说它也在基础前奏曲my bad中。我想不是。很高兴知道,谢谢。