例如,假设我们有函数double(x) = 2 * x
和。什么是函数?请注意,我问的是一个可用于任何数量的函数的函数。例如,您可以用, , into组成。square(x) = x ^ 2
sum(x,y) = x + y
compose
compose(compose(sum, square), double) = x^2 + 2*x
f(x,y,z)
g(x)
h(x)
i(x)
f(g(x), h(x), i(x))
问问题
563 次
1 回答
4
这是一个常见的 Haskell 习语,applicative functors:
composed = f <$> g1 <*> g2 <*> ... <*> gn
(可以在这里找到更好的介绍)。
由于自动部分应用,这看起来非常干净,并且工作方式如下:
(<*>) f g x = f x (g x)
(<$>) f g x = f (g x) -- same as (.)
例如,
f <$> g <*> h <*> i ==>
(\x -> f (g x)) <*> h <*> i ==>
(\y -> (\x -> f (g x)) y (h y)) <*> i ==>
(\y -> f (g y) (h y)) <*> i ==>
(\z -> (\y -> f (g y) (h y)) z (i z)) ==>
(\z -> f (g z) (h z) (i z)).
不过,应用函子更通用。它们不是“算法”,而是一个概念。您也可以在树上执行相同的操作,例如(如果定义正确):
(+) <$> (Node (Leaf 1) (Leaf 2)) <*> (Node (Leaf 3) (Leaf 4)) ==>
Node (Leaf 4) (Leaf 6)
但我怀疑应用程序是否真的可以在大多数其他语言中使用,因为缺乏简单的部分应用程序。
于 2012-11-18T17:15:57.383 回答