Function Currying

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

部分绑定函数

含义是不是一目了然?学过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集其大成。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容