函数加里化和偏函数应用的比较
作者:网络转载 发布时间:[ 2013/4/18 11:35:46 ] 推荐标签:
我们定义的bar函数并不是一个加里化的函数。调用bar(5)并不会返回一个可以输入12的函数。我们只能像bar(5,12)这样调用这个函数。
在一些其它语言里,比如 Haskell 和 OCaml,所有的多参数函数都是通过加里化实现的。
下面是一个把上面的foo函数用OCaml语言写成的例子:
let foo = fun a ->
fun b ->
a * a + b * b
下面是把上面的bar函数用OCaml语言写成的例子:
let bar = fun a b ->
a * a + b * b
头一个函数我们叫做“显式加里化”,第二个叫做“隐式加里化”。
跟Javascript不一样,在OCaml语言里,foo函数和bar函数是完全一样的。我们用完全一样的方式调用它们。
# foo 3 4;;
- : int = 25
# bar 3 4;;
- : int = 25
两个函数都能够通过提供一个参数值来创造一个偏函数:
# let foo5 = foo 5;;
val foo5 : int -> int = <fun>
# let bar5 = bar 5;;
val bar5 : int -> int = <fun>
# foo5 12;;
- : int = 169
# bar5 12;;
- : int = 169
事实上,我们可以把下面这个匿名函数:
fun arg1 arg2 ... argN -> exp
当作是下面这个函数的简写:
fun arg1 -> fun arg2 -> ... -> fun argN -> exp
函数加里化和偏函数应用的总结
● 偏函数应用是找一个函数,固定其中的几个参数值,从而得到一个新的函数。
● 函数加里化是一种使用匿名单参数函数来实现多参数函数的方法。
● 函数加里化能够让你轻松的实现某些偏函数应用。
● 有些语言(例如 Haskell,OCaml)所有的多参函数都是在内部通过函数加里化实现的。

sales@spasvo.com