Programación a nivel funcional
# Programación a nivel funcional

La programación a nivel funcional es uno de los dos paradigmas contrastantes identificados por John Backus en su trabajo sobre los programas como objetos matemáticos, siendo el otro la programación a nivel de valores.
En su discurso de aceptación del Premio Turing en 1977, Backus describió lo que considera como la necesidad de un cambio a una filosofía diferente en el diseño de lenguajes de programación:
El lenguaje de programación FP fue el primer lenguaje diseñado específicamente para dar soporte al estilo de programación a nivel funcional.
Un programa de nivel funcional no necesita la noción de variable, dado que las variables, que son elemento esencial en las definiciones a nivel de valores, no hacen falta en el nivel funcional.
En el estilo de programación de nivel funcional los programas se escriben como combinación de otros programas con la ayuda de los operaciones de construcción de programas o funcionales.
Bajo este enfoque los programas, con los funcionales como operadores, forman un espacio matemático.
Otra ventaja potencial de este enfoque es la posibilidad de restringirse únicamente a las funciones estrictas y asociarles un mecanismo de evaluación por valor. que es el más sencillo de implementar. Otra ventaja es la existencia de definiciones de nivel funcional que no son simplemente el correspondiente de una definición de nivel de valores. Estas definiciones, a veces un poco crípticas por lo concisas representan un estilo de programación muy poderoso.
Si bien la propuesta de Backus data de los años 70, su adopción por la comunidad de programación funcional ha sido limitada, al gozar de mayor popularidad el cálculo Lambda.
La programación a nivel funcional en el estilo de FP tiene una fuerte relación con la lógica combinatoria de Haskell Curry, con los lenguajes de combinadores, antecesores de Miranda y Haskell, así como con las categorías cartesianas cerradas, teoría que dio origen al lenguaje CAML (Categorical Abstract Machine Languaje), antecesor del lenguaje Ocaml.