Currificació
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]- ↑ Henk Barendregt, Erik Barendsen, "Introduction to Lambda Calculus", març 2000, pàgina 8.
- ↑ Curry, Haskell; Feys, Robert. Combinatory logic (en anglès), 1958 [Consulta: 23 octubre 2013].
- ↑ 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]- Schönfinkel, Moses «Uber die Bausteine der mathematischen Logik» (en alemany). Mathematische Annalen, 92, 3–4, 1924, pàg. 305-316. DOI: 10.1007/BF01448013 [Consulta: 23 octubre 2013].
- Heim, Irene. Semantics in a Generative Grammar (en anglès), 1998. ISBN 978-0631197133 [Consulta: 23 octubre 2013].
Enllaços externs
[modifica]- Currificació en C Arxivat 2010-12-25 a Wayback Machine., (anglès)
- Currificació en Python, (anglès)
- Currificació en Scala, (anglès)
- Currificació en Perl, (anglès)