Wenn f :: a -> b -> c curried dann uncurry (f) ist, kann wie folgt definiert werden: -> B -> CUncurry a curried Funktion von n Parametern in JavaScript
uncurry :: (a) -> ((a, b) -> c)
Ich versuche, die obige Funktion in Javascript zu implementieren. Ist meine nachstehende Implementierung korrekt und generisch genug oder gibt es eine bessere Lösung?
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
Dies ist Ihre vierte oder fünfte Frage in den letzten Tagen in dieser Richtung. Ich glaube ich bin neugierig, warum versuchst du das alles * manuell * zu machen anstatt Ramda zu benutzen? Ganz zu schweigen davon, dass * alle * leicht durch einen Blick auf den Ramda-Quellcode beantwortet werden konnten. –