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: