Porgramaçon funcional

An ciéncia de la cumputaçon, **porgramaçon funcional** ye un paradigma de porgramaçon que trata la cumputaçon cumo ua abaluaçon de funçones matemáticas i qu'eibita stados ó dados mutables. Eilha anfatiza l'aplicaçon de funçones, an cuntreste de la porgramaçon amperatiba, qu'anfatiza mudanças ne l stado de l porgrama.

Ua funçon, neste sentido, puode tener ó nun tener parámetros i un simples balor de retorno. Ls parámetros son ls balores d'antrada de la funçon, i l balor de retorno ye l resultado de la funçon. La defeniçon dua funçon çcribe cumo la funçon será abaluada an tenermos d'outras funçones. Por eisemplo, la funçon f(x) = x^2 + 2 ye defenida an tenermos de funçones de sponenciaçon i adiçon. De l mesmo modo, la lenguaige debe ouferecer funçones básicas que nun requíren defeniçones adicionales.

Lenguaiges de porgramaçon funcionales, specialmente las puramente funcionales, ten sido mais ousadas academicamente que ne l zambolbimiento comercial de software. Antretanto, alguas lenguaiges notables ousadas na andústria i ne l comércio ancluen Erlang (aplicaçones cuncorrentes), R (statística), Mathematica (matemática simbólica) J, K (análeze financeira) i XSLT. Amportantes anfluéncias na porgramaçon funcional fúrun l cálclo lambda, las lenguaiges de porgramaçon APL i Lisp, i mais recentemente ML, Haskell, OCaml i F#.

## Zambolbimiento
Las funçones puoden ser manipuladas nua grande bariadade de formas nua lenguaige de porgramaçon funcional. Las funçones son tratadas cumo balores de purmeira amportança, l que ye l mesmo que dezir que funçones puoden ser parámetros ó balores d'antrada para outras funçones i puoden ser ls balores de retorno ó salida dua funçon. Anton podemos antender paradigma funcional cumo un mapeamiento de ls balores d'antrada ne ls balores de retorno, atrabeç de funçones. Esso permite que funçones cumo `mapcar` an LISP i `map` an Haskell que tóman ambos ua funçon i ua lista cumo antrada i aplican la funçon d'antrada la cada eilemiento de la lista. Funçones puoden ser nomeadas, cumo an outras lenguaiges, ó defenidas anonimamente (alguas bezes durante l'eisecuçon de l porgrama) usando ua abstraçon lambda i ousadas cumo balores an outras funçones. Lenguaiges funcionales tamien permiten que funçones séian de l tipo *curry*. *[[Currying]]* ye ua técnica para rescrita de funçones cun múltiplos parámetros cumo la cumposiçon de funçones dun parámetro. La funçon de l tipo *curry* puode ser aplicada solo a un subconjunto de sous parámetros. L resultado ye ua funçon adonde ls parámetros neste subconjunto son agora fixados cumo custantes, i ls balores de l resto de ls parámetros inda nun son specificados. Esta nuoba funçon puode ser aplicada als parámetros restantes para oubter l balor de la funçon final. Por eisemplo, ua funçon `adiciona(x,y) = x + y` puode ser de l tipo *curry* de forma que l balor de retorno `adiciona(2)` — note que que nun hai un parámetro y — será ua funçon anónima, l que ye eiquibalente a la funçon `adiciona2(y) = 2 + y`. Esta nuoba funçon ten solo un parámetro i corresponde a adicionar 2 a un númaro. Outra beç, esso ye solo possible porque las funçones son tratadas cumo balores de purmeira amportança.

L cálclo lambda puode ser cunsidrado la purmeira lenguaige de porgramaçon funcional, ambora nunca tenga sido porjetada para ser rialmente eisecutada nun cumputador. Ye un modelo de cumputaçon porjetado por Alonzo Church ne ls anhos 1930 qu'ouferece un modo mui formal de çcrebir un cálclo dua funçon. La purmeira lenguaige de porgramaçon funcional criada para cumputadores fui LISP, zambolbida por John McCarthy ne l Anstituto de Tecnologie de Massachusetts (MIT) ne l fin de ls anhos 1950. Mesmo nun sendo ua lenguaige de porgramaçon puramente funcional, LISP antroduziu la maiorie de las caratelísticas hoije ancontradas nas modernas lenguaiges de porgramaçon funcional. Scheme fui ua tentatiba posterior de simplificar i melhorar LISP. Ne ls anhos 1970 la lenguaige ML fui criada pula Ounibersidade de Eidimburgo, i David Turner zambolbiu la lenguaige Miranda na Ounibersidade de Kent. La lenguaige Haskell fui lançada ne l fin de ls anhos 1980 nua tentatiba de juntar muitas eideias na pesquisa de porgramaçon funcional.

## Cuntreste cula porgramaçon amperatiba
La porgramaçon funcional puode ser cuntrastada cula porgramaçon amperatiba. Na porgramaçon funcional parécen faltar dibersas custruçones frequentemente (ambora ancorretamente) cunsidradas eissenciales an lenguaiges amperatibas, cumo C ó Pascal. Por eisemplo, nua porgramaçon stritamente funcional, nun hai alocaçon splícita de mimória, nin declaraçon splícita de bariables. Inda assi, essas ouparaçones puoden ocorrer outomaticamente quando la funçon ye ambocada; l'alocaçon de mimória ocorre para criar spácio pa ls parámetros i pa l balor de retorno, i la declaraçon ocorre para copiar ls parámetros drento deste spácio recén-alocado i para copiar l balor de retorno de buolta para drento de la funçon que la chama. Ambas las ouparaçones puoden ocorrer ne ls puntos d'antrada i na salida de la funçon, anton eifeitos colaterales ne l cálclo de la funçon son eliminados. Al nun permitir eifeitos colaterales an funçones, la lenguaige ouferece trasparéncia referencial. Esso assegura que l resultado de la funçon será l mesmo para un dado cunjunto de parámetros nun amportando adonde, ó quando, seia abaluada. Trasparéncia referencial facelita mui ambas las tarefas de cumprobar la correçon de l porgrama i outomaticamente eidantificar cumputaçones andependientes para eisecuçon paralela.

Laços, outra custruçon de porgramaçon amperatiba, stan persentes atrabeç de la custruçon funcional mais giral de recursebidade. Funçones recursibas ambocan la si mesmas, permitindo qu'ua ouparaçon seia rializada bárias bezes. Na berdade, esso proba que laços son eiquibalentes a un tipo special de recursebidade chamada recursebidade rebersa. Recursebidade an porgramaçon funcional puode assumir bárias formas i ye an giral ua técnica mais poderosa que l'uso de laços. Por essa rezon, quaije todas las lenguaiges amperatibas tamien la suportan (sendo Fortran 77 i COBOL sceçones notables).

* Cousineau, Guy and Michel Mauny. *The Funtional Approach to Porgramming*. Cambridge, UK: Cambridge University Press, 1998.
* Grahan, Paul. *ANSI Common LISP*. Anglewod Cliffs, New Jersey: Prentice Preça de casa, 1996.
* Hudak, Paul. "Cuncetion, Eibolution, and Application of Funtional Porgramming Languages". *ACM Cumputing Surbeys* 21, ne l. 3 (1989): 359-411.
* Pratt, Terrence, W. and Marbin B. Zelkowitç. *Porgramming Languages: Zeign and Amplementation*. 3rd ed. Anglewod Cliffs, New Jersey: Prentice Preça de casa, 1996.
* Salus, Peter H. *Funtional and Logic Porgramming Languages. Bol. 4 of Handbook of Porgramming Languages*.  Andianapolis, Andiana: Macmillan Technical Publishing, 1998.
* Thompson, Simon. *Haskell: The Craft of Funtional Porgramming*. Harlow, Angland: Addison-Wesley Longman Lemited, 1996.

## 
* Cálclo lambda