perpetual currying

by sagargiri8846

JavaScript

const add = (a, b, c) => a + b + c

const mul = (a, b, c, d) => a * b * c * d

 const perpetualCurry= fn=>(...args)=>{
     if(args.length===fn.length){   
    return fn(...args)
    }
    else return perpetualCurry(fn.bind(fn,...args))
 }
 
 
const multplyC = perpetualCurry(mul)
const addC = perpetualCurry(add)
console.log(addC(1)(2)(3))
console.log(multplyC(1)(2)(3)(4))
/* 
function perpetualCurry(func) {
  const len = func.length

  function inner(l, arr) {
    return function(a) {
      if (l <= 1) {
       return func(...arr,a)
      } else {
      return  inner(len - 1, [...arr,a])
      }
    }


  }


  return inner(len, [])
} */

/* 
function curry(fn) {
  const N = fn.length;
  function innerFn(n, args) {
    return function (a) {
      if(n <= 1) {
        return fn(...args, a);
      }
     return innerFn(n - 1, [...args, a]);
    }
  }
  return innerFn(N, [])
}
 */
 
 /* let sum=(a,b,c,d,e)=>a+c+b+d+e

function functionCurry(fn){
    return function(...params){
        console.log(params,fn.length)
        if(params.length === fn.length){
          return  fn(...params)
           //call the fn
        }else{
            return functionCurry(fn.bind(fn,...params))
        }
    }
}
const currySum=functionCurry(sum)

console.log(currySum(1)(2)(1)(2)(1))
 */