Programación Funcional
La programación funcional trata la computación como la evaluación de funciones matemáticas, evitando el estado mutable y enfatizando las funciones de orden superior, la inmutabilidad y el razonamiento ecuacional.
Definition
La programación funcional es un paradigma en el que los programas se construyen componiendo funciones puras sobre datos inmutables, de modo que la evaluación de una expresión depende solo de sus entradas y no produce efectos secundarios observables.
Scope
Este tema cubre el paradigma funcional basado en el cálculo lambda: funciones de primera clase y de orden superior, inmutabilidad y transparencia referencial, recursión, evaluación perezosa, tipos de datos algebraicos y emparejamiento de patrones, y el uso de mónadas y otras abstracciones para estructurar efectos. Aborda por qué las funciones puras facilitan la composición, el razonamiento y el paralelismo.
Core questions
- ¿Cómo mejoran la modularidad las funciones de orden superior y la evaluación perezosa?
- ¿Qué aporta la transparencia referencial en términos de razonamiento y optimización?
- ¿Cómo se modelan los efectos secundarios en un entorno puramente funcional?
- ¿Cómo se relaciona el código funcional con el cálculo lambda y con la teoría de tipos?
Key theories
- Unión a partir de funciones de orden superior y pereza
- Hughes sostiene que la ventaja de modularidad de la programación funcional proviene de las funciones de orden superior y la evaluación perezosa, que actúan como 'pegamento' para componer piezas de programa pequeñas y reutilizables.
- Mónadas para estructurar efectos
- Wadler demostró cómo las mónadas proporcionan una forma uniforme y composicional de encadenar estados, excepciones y otros efectos a través de programas funcionales que de otro modo serían puros.
- Álgebra de programas funcionales
- La programación a nivel de función de Backus presenta un álgebra de combinadores con leyes ecuacionales que apoyan el razonamiento y la transformación de programas.
Clinical relevance
Las técnicas funcionales, como la inmutabilidad y las funciones puras, reducen las clases de errores vinculados al estado mutable compartido y hacen que el código sea más fácil de probar y paralelizar. Estas ideas se han difundido ampliamente en los lenguajes principales a través de lambdas, colecciones inmutables y abstracciones de flujo/map-reduce.
History
La programación funcional se remonta al cálculo lambda de Church y al Lisp de McCarthy (1958). Las décadas de 1970 y 1980 produjeron ML, Miranda y Scheme; la conferencia Turing de Backus de 1977 impulsó la crítica funcional al estilo imperativo. Haskell estandarizó la programación perezosa y puramente funcional alrededor de 1990, y el manejo de efectos basado en mónadas de Wadler hizo que la programación funcional pura fuera práctica para tareas del mundo real.
Debates
- Evaluación perezosa versus estricta
- Los diseñadores de lenguajes funcionales debaten si la evaluación perezosa (llamada por necesidad), que permite estructuras infinitas elegantes y modularidad, vale sus costos en el razonamiento sobre el espacio y el rendimiento en comparación con la evaluación estricta.
Key figures
- John Hughes
- Philip Wadler
- John Backus
- Richard Bird
- Simon Peyton Jones
Related topics
Seminal works
- hughes1989
- wadler1992
- backus1978
- bird1998
Frequently asked questions
- ¿Qué es la transparencia referencial?
- Una expresión es referencialmente transparente si puede ser reemplazada por su valor sin cambiar el comportamiento del programa, lo cual ocurre cuando las funciones son puras y los datos son inmutables.
- ¿Cómo maneja la programación funcional la entrada/salida y el estado?
- Los efectos se modelan típicamente de forma explícita, por ejemplo, a través de mónadas o sistemas de efectos, de modo que el orden y la presencia de efectos secundarios se capturan en los tipos en lugar de surgir implícitamente de la mutación.