currying vs partial function application

The easiest way to see how they differ is to consider a real example. Let's assume that we have a function Add which takes 2 numbers as input and returns a number as output, e.g. Add(7, 5)returns 12. In this case:

• Partial applying the function Add with a value 7 will give us a new function as output. That function itself takes 1 number as input and outputs a number. As such:

Partial(Add, 7); // returns a function f2 as output

// f2 takes 1 number as input and returns a number as output


So we can do this:

f2 = Partial(Add, 7);
f2(5); // returns 12;
// f2(7)(5) is just a syntactic shortcut

• Currying the function Add will give us a new function as output. That function itself takes 1 number as input and outputs yet another new function. That third function then takes 1 number as input and returns a number as output. As such:

Curry(Add); // returns a function f2 as output

// f2 takes 1 number as input and returns a function f3 as output
// i.e. f2(number) = f3

// f3 takes 1 number as input and returns a number as output
// i.e. f3(number) = number


So we can do this:

f2 = Curry(Add);
f3 = f2(7);
f3(5); // returns 12


In other words, "currying" and "partial application" are two totally different functions. Currying takes exactly 1 input, whereas partial application takes 2 (or more) inputs.

Even though they both return a function as output, the returned functions are of totally different forms as demonstrated above.

• 评论

• 下一篇
• 上一篇