// 组合函数 compose
function compose(...funcs) {
return funcs.reduce((acc, func) => {
return (...args) => acc(func(...args));
}, (arg) => arg);
}
// 柯里化函数 curry
function curry(func) {
return function curried(...args) {
if (args.length >= func.length) {
return func.apply(this, args);
} else {
return function(...nextArgs) {
return curried.apply(this, args.concat(nextArgs));
};
}
};
}
// 示例函数
function add(a, b) {
return a + b;
}
function multiply(a, b) {
return a * b;
}
// 使用柯里化
const curriedAdd = curry(add);
const result1 = curriedAdd(2)(3);
console.log(result1); // 输出: 5
// 使用组合
const composedFunc = compose(curry(multiply), curriedAdd);
const result2 = composedFunc(2)(3)(4);
console.log(result2); // 输出: 20 (先执行 add(2, 3) 得到 5,再执行 multiply(5, 4) 得到 20)