Currying Questions 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));