Hacker News new | past | comments | ask | show | jobs | submit login

Here's my take:

  function curry(fn, args) {
    if (typeof args == "undefined" || args.length < fn.length)
      return function() {
	if (typeof args == "undefined")
	  args = [];
	return curry(fn, args.concat(Array.prototype.slice.call(arguments)));
      };
    return fn.apply(this, args);
  }
  var add = curry(function(a, b, c) { return a + b + c;});



Here is curry in php 5.3

  function curry(){
    $args = func_get_args();
    $fn = array_shift($args);
    return function() use(&$fn, &$args) {
        $nargs = func_get_args();
        foreach($nargs as $narg) $args[] = $narg;
        return call_user_func_array($fn, $args);
    };
  }

  $add20 = curry(function($a, $b){return $a + $b;}, 20);

  echo $add20(5); #25


Both of our implementations have broken this. Damn you, Javascript this.

In principle, these two lines of code should always produce the same result:

  foo.bar(1,2)
and

  foo.bar(1)(2)
And they won't necessarily in our case, if the function uses this.




Consider applying for YC's Spring batch! Applications are open till Feb 11.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: