haskell - Haskell 中是否有一个函数可以按以下方式对列表的元素进行分组?

标签 haskell

假设我有一个列表 [0,1,2,3],并且我想要一个包含元素 [(0,1), (1,2), (2,3)] 的新列表。 Haskell 中有执行此操作的函数吗?

最佳答案

您可以使其与 zip 一起使用,您可以将列表和该列表的尾部传递给它。例如,使用模式匹配:

f :: [a] -> [(a, a)]
f [] = []
f xa@(_:xs) = zip xa xs

或使用 tail :: [a] -> [a] :

f :: [a] -> [(a, a)]
f xs = zip xs (tail xs)

即使对于空列表,上述内容也将起作用,因为 zip 将首先在第一个列表上进行模式匹配,如果该列表已用尽,它将不会查看第二个列表。

或者应用风格:

f :: [a] -> [(a, a)]
f = zip <*> tail

关于haskell - Haskell 中是否有一个函数可以按以下方式对列表的元素进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60354247/

相关文章:

haskell - 模式匹配比 Haskell 中的 case 表达式更可取的现实示例?

haskell - Monadic Parser - 处理只有一个字符的字符串

json - Haskell, Aeson - 是否有更好的解析历史数据的方法?

arrays - 在haskell中打印二维数组

haskell - 将基本算术函数显示为字符串

list - Codetity与 `DList`和 `[]`之间的关系

haskell - 同一个构造函数可以有不同的行为吗?

Haskell-Stack:构建期间出现访问冲突错误

haskell - 使用 - 在 haskell 中加入两个 IO

function - "chain"将加法运算符转换为接受 3 个参数的函数?