Currying

Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa
Question book.svg
Esta página ou secção não cita nenhuma fonte ou referência, o que compromete sua credibilidade (desde abril de 2012).
Por favor, melhore este artigo providenciando fontes fiáveis e independentes, inserindo-as no corpo do texto por meio de notas de rodapé. Encontre fontes: Googlenotícias, livros, acadêmicoScirusBing. Veja como referenciar e citar as fontes.

Em ciência da computação, currying é uma técnica de transformação de uma função que recebe múltiplos parâmetros (mais especificamente, uma n-tupla como parâmetro) de forma que ela pode ser chamada como uma cadeia de funções que recebem somente um parâmetro cada. Foi inventada por Moses Schönfinkel e Gottlob Frege, e independentemente por Haskell Curry.

Cunhado por Christopher Strachey em 1967, o nome é uma referência ao matemático Haskell Curry.

Definição[editar | editar código-fonte]

Dada uma função f do tipo  f \colon (X \times Y) \to Z , então a técnica de currying a torna  \mbox{curry}(f) \colon X \to (Y \to Z) . Isto é,  \mbox{curry}(f) toma um parâmetro do tipo  X e retorna uma função do tipo  Y \to Z . Uncurrying é a transformação inversa.

Intuitivamente, currying significa que "se você fixa alguns parâmetros, você recebe uma função com os parâmetros remanescentes". Por exemplo, se a função div é a versão em currying da operação x / y, então div com o parâmetro x fixado em 1 é equivalente à função inv, que retorna o inverso de seu parâmetro, definida por inv(y) = 1 / y.

A motivação prática da técnica é que frequentemente se utiliza funções obtidas através da aplicação de somente alguns dos parâmetros. Algumas linguagens de programação possuem suporte sintático nativo ao currying, de forma que funções com múltiplos parâmetros são expandidas para formas reduzidas; exemplos incluem ML e Haskell. Qualquer linguagem que suporte closures pode ser usada para escrever funções com essa técnica de currying.

Ver também[editar | editar código-fonte]

Ligações externas[editar | editar código-fonte]