Function Currying

2017-04-20  本文已影响0人  RocWay

函数柯理化,很多人觉得很难理解。其实难就难在它的翻译并不恰当。如果翻译成

部分绑定函数

含义是不是一目了然?学过C++,用过 STL std::bind函数的同学应该对这个翻译感到很亲切:这不就是名义上只接受部分参数,但其实底下偷偷补足其他参数的做法吗?

比如下面这个JS版的bind函数,它可以绑定函数的第一个参数(预先指定一个实参),从而生成一个新的函数:

var bind = function(fn, a){
    return function(b){
        return fn(a, b)
    }
}
var mult = function(a, b){
    return a*b
}

// 绑定mult的第一个参数a,譬如指定该参数为2
var time2 = bind(mult, 2)

// 调用新函数time2
time(1) // 得2
time(3) // 得6

当然,严谨一点来说,currying之后的函数只接受一个参数,这比一般的部分绑定函数形式上更加精炼。

之所以这种函数处理方式叫做currying,是源自美国的数学家兼逻辑学家,Haskell Curry。虽然不是他发明的,但是却是这种方式的发扬者。
最初由Gottlob Frege提出,经 Moses Schönfinkel发展,最终 Haskell Curry集其大成。

上一篇下一篇

猜你喜欢

热点阅读