我不知道它通常如何称呼,但我需要的是这样的东西:
f a b c = a + 2 * b + 3 * c
map f [(1,2,3), (4,5,6), (7,8,9)]
即将 n 元组列表映射到具有 n 个单独参数的函数。在哈斯克尔中是否有内置的方法可以做到这一点?
PS:我刚才找到了uncurry
,但它似乎不适用于 3 个参数,只有 2 个。
您可以定义自己的函数:
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)]
或者,您可以使用 tuple
包中的uncurryN
,该包适用于最多 15 个元组大小:
cabal install tuple
import Data.Tuple.Curry
map (uncurryN f) [(1,2,3), (4,5,6), (7,8,9)]
一般来说,否 - 因为元组不像列表那样通用,并且可能具有不同的数据类型
但是,您可以按照 ((a,b), c) 的方式重新设计元组,然后您可能希望使用 fst/snd 组合或箭头来概括您的计算。
我不知道
这个问题有任何通用的解决方案,但实际的解决方案是
uncurry3 f (x, y, z) = f x y z
然后
map (uncurry3 f) [(1,2,3), (4,5,6), (7,8,9)]