Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JavaScript curry function

I have implemented a curry function this way:

function curry (fn) {
    var slice = Array.prototype.slice,
        args = slice.apply(arguments, [1]);
    return function () {
        fn.apply(null, args.concat(slice.apply(arguments)));
    };
}

When I use the above function to do the following

function add (x, y) {
    return x + y;
}

var inc = curry(add, 1);
console.log(inc(10));

it logs undefined. Isn't 11 the expected output? What is wrong with my code?

Note: Using console.log(x, y) inside the add function logs 1 10. I don't understand why it returns undefined.

like image 783
dheerosaur Avatar asked Dec 09 '10 04:12

dheerosaur


1 Answers

You're missing a return in your curry function.

I.e.

return function () {
    return fn.apply(null, args.concat(slice.apply(arguments)));
};

That seems to work :)

like image 151
Christian Joudrey Avatar answered Oct 14 '22 05:10

Christian Joudrey