Si f :: a -> b -> c est cari puis uncurry (f) peut être défini comme:Uncurry une Fonction cari de n paramètres en javascript
uncurry :: (a -> b -> c) -> ((a, b) -> c)
J'essaie d'implémenter la fonction ci-dessus en javascript. Est-ce que ma mise en œuvre ci-dessous est correcte et assez générique ou existe-t-il une meilleure solution?
const uncurry = f => {
if (typeof f != "function" || f.length == 0)
return f;
return function()
{
for (let i = 0; i < arguments.length; i++){
f = f(arguments[i]);
}
return f;
};
}
const curry = f => a => b => f(a, b);
const curriedSum = curry((num1, num2) => num1 + num2);
console.log(curriedSum(2)(3)); //5
console.log(uncurry(curriedSum)(2, 3)); //5
Voici votre quatrième ou cinquième question de ces derniers jours. Je suppose que je suis curieux, pourquoi essayez-vous de faire tout cela * manuellement * au lieu d'utiliser Ramda? Sans compter que * tous * auraient pu être facilement résolus en jetant un coup d'œil sur le code source de Ramda. –