In functional programming languages, currying is an 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)
.These languages automatically fully curry functions called with too few arguments:
See also: