 in mathematics and computer science, currying is the technique of translating the evaluation of a function that takes multiple arguments (or a tuple of arguments) into evaluating a sequence of functions, each with a single argument (partial application). it was introduced by moses schÃ¶nfinkel (reprinted lecture notes from 1967.)kenneth slonneger and barry l. kurtz. formal syntax and semantics of programming languages. p. 144. and later developed by haskell curry.henk barendregt, erik barendsen, "introduction to lambda calculus", march 2000, page 8. uncurrying is the dual transformation to currying, and can be seen as a form of defunctionalization. it takes a function f(x) which returns another function g(y) as a result, and yields a new function  which takes a number of additional parameters and applies them to the function returned by function f. the process can be iterated if necessary. ==motivation== currying is similar to the process of calculating a function of multiple variables for some given values on paper. for example, given the function f(x,y) = y / x: :to evaluate f(2,3), first replace x with 2 :since the result is a function of y, this new function g(y) can be defined as g(y) = f(2,y) = y/2 :next, replace the y argument with 3, producing g(3) = f(2,3) = 3/2 on paper, using classical notation, this is usually done all in one step. however, each argument can be replaced sequentially as well. each replacement results in a function taking exactly one argument. this produces a chain o
Functional_programming Higher-order_functions Lambda_calculus