Currying vs partial application
Currying
Currying toma una función
f: X * Y -> R
y lo convierte en una función
f’: X -> (Y -> R)
En lugar de llamar f con dos argumentos, invocamos f’ con el primer argumento. El resultado es una función que entonces llamamos con el segundo argumento para producir el resultado. Por lo tanto, si el f no es comparable se invoca como
f(3,5)
entonces el f’ comparables es invocada como
f(3)(5)
Por ejemplo: Uncurried add()
function add(x, y) {
return x + y;
}
add(3, 5); // returns 8
Curried add()
function addC(x) {
return function (y) {
return x + y;
}
}
addC(3)(5); // returns 8
El algoritmo para currying.
Curry toma una función binaria y devuelve una función unaria, función que devuelve una función unaria.
curry: (X × Y → R) → (X → (Y → R))
Codigo Javascript:
function curry(f) {
return function(x) {
return function(y) {
return f(x, y);
}
}
}
Partial application
Partial application toma una funcion
f: X * Y -> R
y un valor fijo para el primer argumento para producir una nueva función
f`: Y -> R
f’ hace lo mismo que f, pero sólo tiene que completar el segundo parámetro.
Por ejemplo: almacenando el primer argumento de la función de añadir a 5 resulta la función más 5.
function plus5(y) {
return 5 + y;
}
plus5(3); // returns 8
El algoritmo de partial application.
partApply toma una función y un valor binario y produce una función unaria.
partApply : ((X × Y → R) × X) → (Y → R)
Codigo Javascript:
function partApply(f, x) {
return function(y) {
return f(x, y);
}
}

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