Answer
t.me/js_testОтвет:
function curry(func) {
return function curried(...args) {
if (args.length >= func.length) {
return func.apply(this, args);
} else {
return function (...args2) {
return curried.apply(this, args.concat(args2));
};
}
};
}
Обьяснение:
На вход мы получаем функцию которую нужно преобразовать, возвращаем мы тоже функцию, она называется curried, в которую можно передать неограниченное количество аргументов. Внутри возвращаемой функции есть две логические ветви, мы проверяем набралось ли достаточное количество аргументов и если да то просто вызываем функцию func со всеми набранными аргументами, если аргументов недостаточно то мы возвращаем функцию с помощью которой накопятся новые аргументы и снова вызовется функция curried которая опять будет ждать накопления аргументов или вызовет func.
Код для проверки:
function curry(func) {
return function curried(...args) {
if (args.length >= func.length) {
return func.apply(this, args);
} else {
return function (...args2) {
return curried.apply(this, args.concat(args2));
};
}
};
}
const sum = (a, b, c) => {
return a + b + c;
};
const currySum = curry(sum);
console.log(currySum(1, 1, 1)); // 3
console.log(currySum(1)(1, 1)); // 3
console.log(currySum(1, 1)(1)); // 3
console.log(currySum(1)(1)(1)); // 3