Haskell中的元组映射

时间:2012-09-15 10:55:06

标签: haskell map tuples

我不知道它通常是怎么称呼的,但我需要的是这样的:

f a b c = a + 2 * b + 3 * c

map f [(1,2,3), (4,5,6), (7,8,9)]

即。将n元组的列表映射到具有n个单独参数的函数。在Haskell中是否有内置的方法来执行此操作?

P.S。:我刚刚找到了uncurry,但它似乎没有以3个参数的方式工作,只有2个。

3 个答案:

答案 0 :(得分:8)

您可以定义自己的功能:

uncurry3 :: (a -> b -> c -> d) -> (a,b,c) -> d
uncurry3 f (a,b,c) = f a b c

map (uncurry3 f) [(1,2,3), (4,5,6), (7,8,9)]

或者,您可以使用uncurryN包中的tuple,该包适用于最大为15的元组大小:

cabal install tuple

import Data.Tuple.Curry

map (uncurryN f) [(1,2,3), (4,5,6), (7,8,9)]

答案 1 :(得分:2)

一般来说,没有 - 因为元组不像列表那么通用,并且可能有不同的数据类型

但是你可以用((a,b),c)的方式重新编写元组,然后你可能想要使用fst / snd组合或Arrows来推广你的计算。

答案 2 :(得分:0)

我不知道这个问题的任何一般解决方案,但实际的解决方案是

uncurry3 f (x, y, z)  =  f x y z

然后

map (uncurry3 f) [(1,2,3), (4,5,6), (7,8,9)]