柯里化(currying)与部分应用(partial application)
柯里化(currying)
柯里化是使一个函数
f: X * Y -> R
转变为
f’: X -> (Y -> R)
与用两个参数调用f不同,我们用一个参数运行f’。返回的结果是一个函数,然后用第二个参数调用此函数,得到结果。
如此,如果未柯里化的函数f这样调用
f(3,5)
柯里化后的函数f’是这样调用的
f(3)(5)
比如: 未柯里化的函数add()
function add(x, y) {
return x + y;
}
add(3, 5); // returns 8
柯里化后的add()
function addC(x) {
return function (y) {
return x + y;
}
}
addC(3)(5); // returns 8
柯里化的规则
柯里化将一个二元函数,转变为一元函数,这个函数将返回另一个一元函数。
curry: (X × Y → R) → (X → (Y → R))
Javascript Code:
function curry(f) {
return function(x) {
return function(y) {
return f(x, y);
}
}
}
部分应用(partial application)
部分应用将一个函数
f: X * Y -> R
的第一个参数固定而产生一个新的函数
f`: Y -> R
f’与f不同,只需要填写第二个参数,这也是f’比f少一个参数的原因。
比如:将函数add的第一个参数绑定为5来产生函数plus5。
function plus5(y) {
return 5 + y;
}
plus5(3); // returns 8
部分应用的规则
部分应用使用一个二元函数和一个值产生了一个一元函数。
partApply : ((X × Y → R) × X) → (Y → R)
Javascript Code:
function partApply(f, x) {
return function(y) {
return f(x, y);
}
}

MEET THE NEW JSTIPS BOOK
The book to ace the JavaScript Interview.
A short book with 100 answers designed to boost your knowledge and help you ace the technical interview within a few days.
GET THE BOOK NOW