Difference between revisions of "Currying"

 [checked revision] [checked revision]

Currying is the transformation of a multi-argument function into a chain of single-argument functions. Given a function that takes n arguments, currying creates a function that accepts the first argument and returns a function that accepts the second argument, and so on. For example, given a function f(x, y), we can define a function g such that g(x)(y) == f(x, y). g is the curried version of f; it is also a higher-order function.

Code

The following function curries a two-argument function:

curry = lambda f: lambda x: lambda y: f(x, y)

Examples:

3
>>> list(curry(map)(lambda x: x * x)([1, 2, 3]))
[1, 4, 9]

Motivation

Currying uses single-argument functions to simulate multi-argument functions. Some programming languages, such as Haskell, only allow single-argument functions, so the programmer must curry all multi-argument functions.

In languages like Python, currying is useful when we require a function that takes in only a single argument. For example, map applies a single-argument function to a sequence of values. If we want to add a constant to each element of a sequence, we need to curry add and pass in the constant before map can use it: