Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Variadic curried sum function

I need a js sum function to work like this:

sum(1)(2) = 3 sum(1)(2)(3) = 6 sum(1)(2)(3)(4) = 10  etc. 

I heard it can't be done. But heard that if adding + in front of sum can be done. Like +sum(1)(2)(3)(4).
Any ideas of how to do this?

like image 697
Yaroslav Yakovlev Avatar asked Apr 29 '11 13:04

Yaroslav Yakovlev


2 Answers

Not sure if I understood what you want, but

function sum(n) {    var v = function(x) {      return sum(n + x);    };      v.valueOf = v.toString = function() {      return n;    };      return v;  }    console.log(+sum(1)(2)(3)(4));

JsFiddle

like image 165
Rafael Avatar answered Sep 30 '22 04:09

Rafael


This is an example of using empty brackets in the last call as a close key (from my last interview):

sum(1)(4)(66)(35)(0)()

function sum(numberOne) {   var count = numberOne;   return function by(numberTwo) {     if (numberTwo === undefined) {       return count;     } else {       count += numberTwo;       return by;     }   } } console.log(sum(1)(4)(66)(35)(0)());
like image 45
yury.hrynko Avatar answered Sep 30 '22 03:09

yury.hrynko