Currying

HomePage | Recent changes | View source | Discuss this page | Page history | Log in |

Printable version | Disclaimers | Privacy policy

Currying is a functional programming language operation performed on functions of more than one argument. Currying a function f of two arguments produces a function g of one argument that returns a function of one argument such that f(x, y) equals (g(x))(y), or in Lisp notation (f x y) equals ((g x) y). By extension, fully currying a function f of three arguments produces g such that f(x, y, z) equals ((g(x))(y))(z), or in Lisp notation (f x y z) equals (((g x) y) z).

To do currying in the Scheme programming language:

(define curry2
  (lambda (f)
    (lambda (x)    ; take the first argument
      (lambda y    ; and the rest of the args as a list
        (f x . y)))))

If g equals (curry2 f), then (f x y) equals ((g x) y), and (f x y z) equals ((g x) y z). (To do: Add Scheme language definition for currying to any given depth.)

The ML language automatically fully curries functions called with too few arguments.

Currying is named after the logician Haskell Curry.

See also Haskell programming language.