函数加里化(Currying)和偏函数应用(Partial Application)的比较

2013-04-25 02:16

函数加里化(Currying)和偏函数应用(Partial Application)的比较

by

at 2013-04-24 18:16:03

original http://www.aqee.net/currying-partial-application/

函数式编程

【名词解释】Currying:因为是美国数理逻辑学家哈斯凯尔·加里(Haskell Curry)发明了这种函数使用技巧,所以这样用法就以他的名字命名为Currying,中文翻译为“加里化”。

我感觉很多人都对函数加里化(Currying)和偏函数应用(Partial Application)之间的区别搞不清楚,尤其是在相似的上下文环境中它们同时出现的时候。

偏函数解决这样的问题:如果我们有函数是多个参数的,我们希望能固定其中某几个参数的值。

几乎所有编程语言中都有非常明显的偏函数应用。在C语言中:

int foo(int a, int b, int c) {

return a + b + c; }

int foo23(int a, int c) { return foo(a, 23, c);

}

foo23函数实际上就是一个foo函数的偏函数应用,参数b的值被固定为23。

当然,像这样明显的偏函数并没有太大的用处;我们通常会希望编程语言能提供我们某些偏函数特征。

例如,在Python语言中,我们可以这样做:

from functools import partial

def foo(a,b,c):

return a + b + c

foo23 = partial(foo, b=23)

foo23(a = 1, c = 3) # => 27

<