La programación funcional es un paradigma de programación donde la base de la computación es la evaluación de expresiones. Algunas características son el uso de funciones de orden superior, transparencia referencial y evaluación perezosa. Las ventajas del estilo de programación incluyen que los programas son fáciles de leer, son muy confiables y se pueden dividir en componentes. Las desventajas son que los cálculos pueden ser lentos y el estilo y la sintaxis son completamente diferentes de otros estilos de programación comunes. El estilo de programación funcional es adoptado con más frecuencia por los académicos que por los profesionales de la informática.
Como sugiere el nombre, las funciones son parte fundamental de este paradigma de programación. Las funciones se pueden anidar dentro de otras funciones, llamadas funciones de orden superior, y cada función de orden superior se puede dividir en funciones de bloques de construcción que son fáciles de entender y depurar. Ejemplos de algunas funciones de orden superior son Map y Nest. La función Map toma una función F y la lista de variables, por ejemplo (x, y, z) y da el resultado en una lista: Map [F, (x, y, z)] = (F (x), F (y), F (z)). Nest toma la función F, la variable x y el número de iteraciones: Nest [F, x, 3] = F (F (F (x))).
La programación funcional pura toma una entrada y devuelve una salida sin cambiar el estado de una variable. En otras palabras, una función con la misma entrada siempre dará los mismos resultados independientemente de lo que haya ocurrido previamente en el programa. A esto se le llama transparencia referencial. Dado que las funciones matemáticas son referencialmente transparentes, la programación funcional es intuitiva para muchos matemáticos, ingenieros y científicos.
La transparencia referencial de las funciones significa que el orden de evaluación de las funciones no es importante. Por lo tanto, no es necesario evaluar las funciones hasta que se necesiten sus resultados, lo que se denomina evaluación perezosa. Esto contrasta completamente con la programación imperativa, donde un programa comienza con el primer comando y se ejecuta a través de la lista hasta el último comando. La evaluación perezosa omite partes del programa que no siguen lógicamente o son superfluas, lo que optimiza automáticamente el programa y puede reducir el tiempo de cálculo.
La programación funcional tiene muchas ventajas sobre otros paradigmas de programación. Las funciones con entradas y salidas claras son fáciles de leer y comprender. Una vez que una función está completamente depurada, se puede usar de manera confiable en otras aplicaciones. Las máquinas multinúcleo pueden calcular funciones que se evalúan de forma independiente en paralelo, mejorando drásticamente el rendimiento de los programas.
Desafortunadamente, no todos los programas se prestan a la computación en paralelo, y la computación de los programas funcionales puede ser bastante lenta. Los programas funcionales dependen en gran medida de la recursividad, que a menudo es menos eficiente que el uso de métodos de iteración o bucles tradicionales. De hecho, la programación funcional puede ser bastante torpe y difícil de aprender ya que no se parece a otros paradigmas más comunes como la programación orientada a objetos.
Los académicos tienden a favorecer la programación funcional, ya que proporciona una forma clara y comprensible de programar problemas complejos del mundo real. Algunos lenguajes puros son Haskell y Erlang. Mathematica está especializado en matemáticas simbólicas, R está especializado en estadística y J está especializado en análisis financiero. Los lenguajes multiparadigmas como Scala y F # admiten tanto la programación funcional como otros estilos de programación.