gpt4 book ai didi

haskell - 将列表的(相邻)元素打包成 2 元组的方法

转载 作者:行者123 更新时间:2023-12-02 12:18:32 26 4
gpt4 key购买 nike

我想知道是否有一种简洁/一行的方法来执行以下操作:

pack :: [a] -> [(a, a)]
pack [] = []
pack [_] = []
pack (x:y:xs) = (x, y) : pack xs

这与:

相同
pack' xs = [(x, y) | (x, y, i) <- zip3 xs (tail xs) [0..], even i]

我对这两个选项都没有太多反对,但我想知道:是否有更简洁的方法将 (,) 与其他函数结合起来?

我曾以为会有这样的方法,但它却让我困惑。所以这只是出于好奇。

谢谢!

最佳答案

我们可以使用这个花絮轻松地将列表分成两个具有交替元素的列表( due to HaskellWiki )

 foldr (\a ~(x,y) -> (a:y,x)) ([],[])

剩下的就是将列表与 zip 组合起来

pack :: [a] -> [(a, a)]
pack = uncurry zip . foldr (\a ~(x,y) -> (a:y,x)) ([],[])

关于haskell - 将列表的(相邻)元素打包成 2 元组的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27307709/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com