| advertise add site services publishers database health videos | ![]() | about toolbar stats live show health store more stuff JOIN/LOGIN |
Aromatic Prawn Curry - Aromatic Prawn Curry virtualgastrocentre.com | Aromatic Prawn Curry - Aromatic Prawn Curry virtualneurocentre.com | Orthopaedic Consultant | Mr Sean Curry | Private Treatment For... orthopaediccentrelondon.c... | Curried Walnut Chicken innerlifewellness.com |
This article is about the function transformation technique. For the general variety of spicy dishes from India and other Asian countries, see Curry. For the electrical retailer in the United Kingdom, see Currys. In mathematics and computer science, currying or Schönfinkelisation, invented by Moses Schönfinkel and later re-invented by Haskell Curry,[1] is the technique of transforming a function that takes multiple arguments (or an n-tuple of arguments) in such a way that it can be called as a chain of functions each with a single argument. 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 f'(x, y) which takes a number of additional parameters and applies them to the function returned by f. The process can be iterated if necessary.
[edit] MotivationCurrying is actually not very different from what we do when we calculate a function for some given values on a piece of paper.
On paper, using classical notation, it's just that we seem to do it all at the same time. But, in fact, when replacing arguments on a piece of paper, it is done sequentially (i.e.partially). Each replacement results in a function within a function. As we sequentially replace each argument, we are currying the function into simpler and simpler versions of the original. Eventually, we end up with a chain of functions as in lambda calculus, where each function takes only one argument, and multi-argument functions are usually represented in curried form. The practical motivation for currying is that very often the functions obtained by supplying some but not all of the arguments to a curried function (often called partial application) are useful; for example, many languages have a function or operator similar to This is similar in computer code: If we let f be a function f (x,y) = y / x then the function g x = (\y -> f (x,y)) is a curried version of f. In particular (g 2) = (\y -> f (2,y)) is the version from the paper example. [edit] DefinitionGiven a function f of type The → operator is often considered right-associative, so the curried function type Intuitively, currying says "if you fix the first arguments of the function, you get a function of the remaining arguments". For example, if function div stands for the curried form of the division operation x / y, then div with the parameter x fixed at 1 (i.e. div 1) is another function: the same as the function inv that returns the multiplicative inverse of its argument, defined by inv(y) = 1 / y. Some programming languages have built-in syntactic support for currying, where what looks like a multi-argument function is actually syntactic sugar for the function in curried form; notable examples are ML and Haskell, where in both cases all functions have exactly one argument. Curried functions may be used in any language that supports closures; however, uncurried functions are generally preferred for efficiency reasons, since the overhead of partial application and closure creation can then be avoided for most function calls. [edit] Mathematical viewIn theoretical computer science, currying provides a way to study functions with multiple arguments in very simple theoretical models such as the lambda calculus in which functions only take a single argument. When viewed in a set-theoretic light, currying becomes the theorem that the set This is the key property of being a Cartesian closed category. Under the Curry-Howard correspondence, the existence of currying and uncurrying is equivalent to the logical theorem Curry is a continuous function in the Scott topology. [edit] NamingThe name "currying", coined by Christopher Strachey in 1967, is a reference to logician Haskell Curry. The alternative name "Schönfinkelisation", has been proposed as a reference to Moses Schönfinkel.[2] [edit] See also[edit] Notes
[edit] References
[edit] External links
|
| ↑ top of page ↑ | about thumbshots |