Programación funcional
Concepto:
En ciencias
de la computación, la programación funcional es un paradigma de programación
declarativa basado en la utilización de funciones aritméticas que no maneja
datos mutables o de estado. Enfatiza la aplicación de funciones, en contraste
con el estilo de programación imperativa, que enfatiza los cambios de estado.
La programación funcional tiene sus raíces en el cálculo lambda, un sistema
formal desarrollado en los años 1930 para investigar la definición de función,
la aplicación de las funciones y la recursión. Muchos lenguajes de programación
funcionales pueden ser vistos como elaboraciones del cálculo lambda.
Características:
Los programas
escritos en un lenguaje funcional están constituidos únicamente por definiciones
de funciones, entendiendo éstas no como subprogramas clásicos de un lenguaje
imperativo, sino como funciones puramente matemáticas, en las que se verifican
ciertas propiedades como la transparencia referencial (el significado de una
expresión depende únicamente del significado de sus su expresiones), y por
tanto, la carencia total de efectos colaterales.
Otras
características propias de estos lenguajes son la no existencia de asignaciones
de variables y la falta de construcciones estructuradas como la secuencia o la
iteración (lo que obliga en la práctica a que todas las repeticiones de
instrucciones se lleven a cabo por medio de funciones recursivas).Existen dos
grandes categorías de lenguajes funcionales: los funcionales puros y los
híbridos.
Lenguajes
funcionales:
Es posible
utilizar un estilo de programación funcional en lenguajes que tradicionalmente
no se consideran lenguajes funcionales.
Por ejemplo:
Entre los
lenguajes funcionales puros, cabe destacar a Haskell y Miranda. Los lenguajes
funcionales híbridos más conocidos son Scala, Lisp, Clojure, Scheme,
Ocaml, SAP y Standard ML (estos dos últimos, descendientes del lenguaje ML). Erlang
es otro lenguaje funcional de programación concurrente. Mathematica permite la
programación en múltiples estilos, pero promueve la programación funcional. R
también es un lenguaje funcional dedicado a la estadística.3 Recientemente
Microsoft Research está trabajando en el lenguaje F# (Functional#).
Entre otros
lenguajes que se podrían utilizar para programación funcional se podrían
incluir a Perl, pues, aunque es un lenguaje de propósito muy general, se pueden
realizar programas usando exclusivamente funciones definidas por el usuario;
así como Python, como lenguaje que incorpora el paradigma funcional; o Ruby.
Lisp:
El Lisp fue
creado originalmente como una notación matemática práctica para los programas
de computadora, basada en el cálculo lambda de Alonzo Church. Se convirtió
rápidamente en el lenguaje de programación favorito en la investigación de la
inteligencia artificial (AI). Como uno de los primeros lenguajes de
programación, el Lisp fue pionero en muchas ideas en ciencias de la
computación, incluyendo las estructuras de datos de árbol, el manejo de
almacenamiento automático, tipos dinámicos, y el compilador auto contenido.
Camel:
Camel es un
estilo de escritura que se aplica a frases o palabras compuestas. El nombre se
debe a que las mayúsculas a lo largo de una palabra en Camel se asemejan a las
jorobas de un camello. El nombre Camel se podría traducir como
mayúsculas/minúsculas Camello. El término Case se traduce como "Caja
tipográfica", que a su vez implica si una letra es mayúscula o minúscula y
tiene su origen en la disposición de los tipos móviles en casilleros o cajas.
Hope:
El lenguaje
funcional Hope puede considerarse como una notación para escribir programas en
forma de expresiones funcionales. Una expresión puede estar constituida por un
conjunto de símbolos básicos como; "-,+, >, (, 2", etc.
Los símbolos
pueden ser:
*Operadores
"{+, -, >,...}"
Operandos
"{x, 1, 2,...}"
*Nombres de
funciones (con sus argumentos)
*Separadores
"{;}"
• Ejemplo:
(11 + 10) –
(20 + 5)+ Máximo (pi, 20);
Erlang:
El
subconjunto de programación secuencial de Erlang es un lenguaje funcional, con
evaluación estricta, asignación única, y tipado dinámico. Fue diseñado en la
compañía Ericsson para realizar aplicaciones distribuidas, tolerantes a fallos,
soft-real-time y de funcionamiento ininterrumpido. Proporciona el cambio en
caliente de código de forma que éste se puede cambiar sin parar el sistema.
Originalmente, Erlang era un lenguaje propietario de Ericsson, pero fue cedido
como software de código abierto en 1998. La implementación de Ericsson es,
principalmente interpretada pero también incluye un compilador HiPE (sólo
soportado en algunas plataformas).
F#
(Functional):
F#
(pronunciado F Sharp) es un lenguaje de programación multiparadigma de código
abierto,para la plataforma .NET, que conjunta la programación funcional con las
disciplinas imperativa y orientada a objetos. Es una variante del lenguaje de
programación ML y es compatible con la implementación Objective Caml.
F# es un
lenguaje de programación primeramente funcional, fuertemente tipado, que usa la
inferencia de tipos. Los tipos no necesitan ser explícitamente declarados por
el programador; serán deducidos en proceso de compilación. F# también permite
notaciones explícitas de tipos y requiere de esto en algunas situaciones. F# es
un lenguaje de expresiones basadas en evaluación impaciente. Las funciones y expresiones
que no retornan ningún valor tienen como tipo de retorno unit. F# usa la
palabra clave let para enlazar valores a nombres.
Por ejemplo,
let x = 3 + 4