Currying

Pues no, no se trata de un deporte de disco sobre hielo usando escobas, y tampoco es una práctica consistente en sazonar todas las comidas con la misma especia. En el cálculo lambda se usan funciones con un único parámetro. En posts venideros sobre conexión de funciones conoceremos el motivo, pero ahora centrémonos en aprender como superar esta limitación gracias al currying.

El amigo Haskell Curry, además del lenguaje Haskell desarrolló este concepto. ¿Cómo podríamos emular una función que suma tres número recibidos como parámetros, igual a la del ejemplo que sigue, usándo exclusivamente funciones con un único parámetro?

triSum = (x, y, z) => x + y + z;
triSum(1, 2, 3); //6

Pues la respuesta no parece muy complicada a simple vista:

triSum = x => y => z => x + y + z:
triSum(1)(2)(3); //6

Vamos a desglosarlo un poco para verlo más claro:

let funcFromStep1 = triSum(1); //y => z => 1 + y + z
let funcFromStep2 = funcFromStep1(2); //z => 1 + 2 + z
let funcFromStep3 = funcFromStep2(3); //6

No se tú, pero yo me quedé embobado la primera vez que vi esto…