Programación funcional desde cero: motivación y funciones matemáticas

Fuentes: Functional programming from first principles, part 1 – motivation

Este artículo, primero de una serie titulada "Programación funcional desde los principios básicos", explica qué es la programación funcional y por qué importa. Presenta las cuatro grandes familias de paradigmas de programación (imperativo procedural, orientado a objetos, lógico y funcional) y enmarca a esta última como una disciplina con fundamentos matemáticos sólidos, accesibles para cualquier programador que ya conozca al menos un lenguaje imperativo.

El texto se centra en la definición matemática de función: una correspondencia entre dos conjuntos (dominio y codominio) que cumple las condiciones de totalidad —cada elemento del dominio tiene una imagen— y univalencia —cada elemento del dominio se asocia a exactamente una imagen—. A partir de ahí, introduce las funciones puras, el concepto de composibilidad y las funciones de orden superior, además de mostrar cómo extender la definición a funciones con varios argumentos mediante el producto cartesiano de conjuntos.

Mediante ejemplos concretos, el autor distingue qué correspondencias son funciones válidas y cuáles no, y contrasta las funciones matemáticas con las funciones de un lenguaje de programación, señalando que la diferencia es sobre todo conceptual: mientras los programas requieren un cálculo determinista para producir un resultado, el comportamiento observable es equivalente al de un conjunto finito de pares. La serie promete recorrer la creación de un lenguaje funcional propio para ilustrar las ventajas y compromisos de diseño de esta familia de lenguajes, con ejemplos en Haskell, Elm e Idris como referencia.