var curry=function(){
var fn=[].shift.call(arguments)
var length=fn.length;
var args1=arguments
return function(){
var args2=arguments;
return length>args1.length+args2.length
?curry(fn,...args1,...args2)
:fn(...args1,...args2)
}
}
function add(a,b,c,d){return a+b+c+d}
var x=curry(add)
console.log(x(1)(2)(3)(4));
console.log(x(1,3)(5)(8))