0

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

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

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

即将 n 元组的列表映射到具有 n 个单独参数的函数。Haskell 有内置的方法吗?

PS:我uncurry刚刚发现,但它似乎不适用于 3 个参数,只有 2 个。

4

3 回答 3

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)]

或者,您可以uncurryNtuple适用于最大 15 元组的包中使用:

cabal install tuple

import Data.Tuple.Curry

map (uncurryN f) [(1,2,3), (4,5,6), (7,8,9)]
于 2012-09-15T11:06:48.477 回答
2

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

但是,您可以以 ((a,b), c) 的方式重新处理您的元组,然后您可能希望使用 fst/snd 组合或箭头来概括您的计算。

于 2012-09-15T11:01:06.350 回答
0

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

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

然后

map (uncurry3 f) [(1,2,3), (4,5,6), (7,8,9)]
于 2012-09-15T11:02:32.637 回答