【发布时间】:2013-12-20 23:58:07
【问题描述】:
我知道 zip 可以对对执行此操作,但我认为没有一个函数可以对三元组执行此操作?我怎么做一个?或者如果失败了,我将如何将第三个列表的每个成员依次添加到每一对中,从而制作一个三元组列表?
【问题讨论】:
我知道 zip 可以对对执行此操作,但我认为没有一个函数可以对三元组执行此操作?我怎么做一个?或者如果失败了,我将如何将第三个列表的每个成员依次添加到每一对中,从而制作一个三元组列表?
【问题讨论】:
尝试使用Hoogle:
Prelude 中的一些功能:
zip3 :: [a] -> [b] -> [c] -> [(a, b, c)]
顺便说一下revert函数的存在:
unzip :: [(a, b)] -> ([a], [b])
unzip3 :: [(a, b, c)] -> ([a], [b], [c])
如果需要柯里化,我们可以添加
uncurry3 f (x, y, z) = f x y z
uncurry3 zip3 :: ([a], [b], [c]) -> [(a, b, c)]
【讨论】:
zipWith3 :: (a -> b -> c -> d) -> [a] -> [b] -> [c] -> [d] 代替uncurry3,具体取决于您在做什么。
zip3 (x:xs) (y:ys) (z:zs) = (x,y,z) : zip3 xs ys zs
zip3 _ _ _ = []
【讨论】: