Skip to main content

Implement curry function

You are required to implement a curry function that takes a function and returns a curried version of it.

Currying is a technique in functional programming where a function with multiple arguments is broken down into a sequence of functions each taking a single argument.

Currying is a powerful tool that can improve code reusability, composability, and maintainability.

function sum(a, b, c) {
return a + b + c;
}

let curriedSum = curry(sum);

console.log(curriedSum(1)(2)(3)); // 6
console.log(curriedSum(1, 2)(3)); // 6
console.log(curriedSum(1, 2, 3)); // 6

Use cases and Examples

Convert function into a simple curried function

This is a normal function

const sum = (a, b, c) => {
return a + b + c;
}

console.log(sum(1, 2, 3)); // Output: 6

Let's transform this function into a curried version:

const sum = (a) => {
return (b) => {
return (c) => {
return a + b + c;
};
}
}

console.log(sum(1)(2)(3)); // Output: 6

Advanced curry implementation


function curry(func) {
// Return a curried version of the original function
return function curried(...args) {
// If the number of arguments provided is equal to or greater than
// the original function's length, invoke the original function
if (args.length >= func.length) {
return func.apply(this, args);
} else {
// Otherwise, return a function that takes more arguments and
// combines them with the previous arguments
return function(...moreArgs) {
return curried.apply(this, args.concat(moreArgs));
};
}
};
}

// Example usage:
function add(a, b, c) {
return a + b + c;
}

const curriedAdd = curry(add);

console.log(curriedAdd(1)(2)(3)); // 6
console.log(curriedAdd(1, 2)(3)); // 6
console.log(curriedAdd(1, 2, 3)); // 6


Summary

  • Currying transforms a function expecting multiple arguments into a sequence of functions, each taking a single argument