Vés al contingut

Currificació

De la Viquipèdia, l'enciclopèdia lliure

En tecnologies de la informació currificar és una tècnica, inventada per Schönfinkel i Gottlob Frege, i de manera independent per Haskell Curry,[1][2] que consisteix a transformar una funció amb més d'un paràmetre en una composició de funcions que incorporen progressivament, d'un en un, els paràmetres de partida.

Per qualsevol funció de n elements amb dominis D1 a Dn que retorna un valor en el domini Dr:[3]

f: D1 x D₂ x ... x Dn → Dr

hi ha una funció currificada equivalent

curry f: D1 → (D₂ → ... →(Dn →Dr))

En altres paraules, curry f: D1 → (D₂ → ... →(Dn →Dr)) pren un argument del tipus D1 i retorna una funció del tipus (D₂ → ... →(Dn →Dr)). Descurrificar és la transformació inversa.

Intuïtivament, la currificació exposa que "Si configures alguns arguments, tindràs una funció dels arguments restants". Per exemple, si la funció div significa la versió currificada de l'operació x/y, llavors div amb el paràmetre x ajustat en 1 és una altra funció: igual a la funció inv que torna la inversa multiplicadora dels seus arguments, definida per inv(y) = 1/y.

La motivació pràctica per currificar és que de vegades, les funcions obtingudes en utilitzar alguns, però no tots, els arguments en una funció currificada poden ser útils, per exemple, molts llenguatges tenen una funció o un operador similar a plus_one. Currificar fa fàcil definir aquestes funcions.

Aplicació parcial

[modifica]

A partir d'una funció podem obtenir-ne una altra si n'escapcem el(s) darrer(s) paràmetre(s).

A partir d'una expressió se'n pot obtenir una funció ometent algun dels termes. Per exemple

Referències

[modifica]
  1. Henk Barendregt, Erik Barendsen, "Introduction to Lambda Calculus", març 2000, pàgina 8.
  2. Curry, Haskell; Feys, Robert. Combinatory logic (en anglès), 1958 [Consulta: 23 octubre 2013]. 
  3. Laurent Dami - More functional reusability in C / C++ / Objective-c with Curried Functions Arxivat 2010-12-25 a Wayback Machine. (anglès) Univ. de Ginebra (Suïssa)

Vegeu també

[modifica]

Bibliografia

[modifica]

Enllaços externs

[modifica]