Currying Questions Javascript

Currying Javascript

Q1. Implement sum(2)(6)(1)

?

Answer

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

Q2. Implement a function using the following code snippet

evaluate("sum")(4)(2) // 6
evaluate("multiply")(4)(2) // 8
evaluate("divide")(4)(2) // 2
evaluate("substract")(4)(2) // 2

?

Answer

function evaluate(operation) {
	return function(n) {
		return function(m) {
			switch(operation) {
				case "sum":
					return n + m;
					break;
				case "multiply":
					return n * m;
					break;
				case "divide":
					return n / m;
					break;
				case "substract":
					return n - m;
					break;
				default:
					return -1;
			}
		}
	}
}

const mul = evaluate("multiply");

console.log(mul(3)(5));
console.log(mul(3)(5));

Q3. Infinite Currying -> sum(1)(2)(3)...(n)()

?

Answer

function add(a) {
	return function (b) {
		if (b) return add(a + b);
		return a;
	}
}

console.log(add(5)(2)(4)(8)())

Q4. Currying vs Partial Application

https://youtu.be/k5TC9i5HonI?t=827&si=oPXsNypCm65u-5Nj

Q5. Manipulating DOM Currying Usage

?

function updateElementText(id) {
	return function (content) {
		document.querySelector("#" + id).textContent = content;
	};
}

const updateHeader = updateElementText("heading");

updateHeader("Hello Chaitanya");
updateHeader("Byeee Chaitanya");

Q6. curry() implementation that converts f(a, b, c) into f(a)(b)(c);

?

function curr(func) {
	return function curriedFunc(...args) {
		if (args.length >= func.length) {
			return func(...args);
		} else {
			return function (...next) {
				return curriedFunc(...args, ...next);
			};
		}
	};
}

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

const totalSum = curry(sum);

console.log(totalSum(1)(2)(3));