FP (abreviatura de programación funcional ) [2] es un lenguaje de programación creado por John Backus para soportar el paradigma de programación a nivel de función [2] . Permite construir programas a partir de un conjunto de primitivas generalmente útiles y evitar variables nombradas (un estilo también llamado programación tácita o "punto libre"). Fue fuertemente influenciado por APL, que fue desarrollado por Kenneth E. Iverson a principios de la década de 1960. [3]
Paradigma | Nivel de función |
---|---|
Diseñada por | John Backus |
Apareció por primera vez | 1977 |
Dialectos | |
FP84 | |
Influenciado por | |
APL [1] | |
Influenciado | |
FL , Haskell |
El lenguaje FP se introdujo en el artículo del Premio Turing de 1977 de Backus , "¿Se puede liberar la programación del estilo von Neumann?", Subtitulado "un estilo funcional y su álgebra de programas". El artículo despertó interés en la investigación de programación funcional, [4] que eventualmente condujo a lenguajes funcionales modernos (que se basan en gran medida en el paradigma del cálculo lambda ), y no al paradigma a nivel de función que Backus esperaba. En su artículo sobre el premio Turing, Backus describió cómo el estilo FP es diferente:
Un sistema de FP se basa en el uso de un conjunto fijo de formas combinadas llamadas formas funcionales. Éstas, más las definiciones simples, son el único medio de construir nuevas funciones a partir de las existentes; no utilizan variables ni reglas de sustitución, y se convierten en operaciones de un álgebra de programas asociada. Todas las funciones de un sistema FP son de un tipo: mapean objetos en objetos y siempre toman un solo argumento. [2]
La propia FP nunca encontró mucha utilidad fuera del ámbito académico. [5] En la década de 1980, Backus creó un lenguaje sucesor, FL , que era un proyecto interno de IBM Research.
Descripción general
Los valores que los programas FP mapean entre sí comprenden un conjunto que se cierra bajo formación de secuencia :
si x 1 , ..., x n son valores , entonces la secuencia〈x 1 , ..., x n〉 también es un valor
Estos valores se pueden construir a partir de cualquier conjunto de átomos: booleanos, enteros, reales, caracteres, etc .:
booleano : { T , F } entero : {0,1,2, ..., ∞} carácter : {'a', 'b', 'c', ...} símbolo : { x , y , .. .}
⊥ es el valor indefinido o inferior . Las secuencias conservan el fondo :
< X 1 , ..., ⊥ , ..., x n > = ⊥
Los programas de PF son funciones f que cada mapa un único valor x a la otra;
f : x representa el valor que resulta de aplicar la función f al valor x
Las funciones son primitivas (es decir, provistas con el entorno FP) o se construyen a partir de las primitivas mediante operaciones de formación de programas (también llamadas funcionales ).
Un ejemplo de función primitiva es constante , que transforma un valor x en la función de valor constante x̄ . Las funciones son estrictas :
f : ⊥ = ⊥
Otro ejemplo de una función primitiva es la familia de funciones de selección , denotada por 1 , 2 , ... donde:
yo : 〈 x 1 , ..., x n〉 = x yo si 1 ≤ yo ≤ n = ⊥ de lo contrario
Funcionales
A diferencia de las funciones primitivas, los funcionales operan en otras funciones. Por ejemplo, algunas funciones tienen un valor unitario , como 0 para la suma y 1 para la multiplicación . La unidad funcional produce tal valor cuando se aplica a una función f que tiene uno:
unidad + = 0 unidad × = 1 unidad foo = ⊥
Estas son las funciones básicas de FP:
composición f ∘ g donde f ∘ g : x = f :( g : x )
construcción [ f 1 , ..., f n ] donde [ f 1 , ..., f n ]: x = 〈f 1 : x , ..., f n : x〉
condición ( h ⇒ f ; g ) donde ( h ⇒ f ; g ): x = f : x si h : x = T = g : x si h : x = F = ⊥ en caso contrario
aplicar a todos α f donde α f : 〈x 1 , ..., x n〉 = 〈f : x 1 , ..., f : x n〉
insert-right / f donde / f : 〈x〉 = x y / f : 〈x 1 , x 2 , ..., x n〉 = f : 〈x 1 , / f : 〈x 2 , ..., x n〉〉 y / f : 〈〉 = unidad f
insert-left \ f donde \ f : 〈x〉 = x y \ f : 〈x 1 , x 2 , ..., x n〉 = f : 〈\ f : 〈x 1 , ..., x n- 1〉, x n〉 y \ f : 〈〉 = unidad f
Funciones ecuacionales
Además de construirse a partir de primitivas mediante funcionales, una función puede definirse de forma recursiva mediante una ecuación, siendo el tipo más simple:
f ≡ E f
donde E f es una expresión construida a partir de primitivas, otras funciones definidas y el símbolo de función f en sí mismo, utilizando funcionales.
FP84
FP84 es una extensión de FP para incluir secuencias infinitas , formas de combinación definidas por el programador (análogas a las que el propio Backus agregó a FL , su sucesor de FP) y evaluación perezosa . A diferencia de FFP, otra de las variaciones propias de Backus sobre FP, FP84 hace una clara distinción entre objetos y funciones: es decir, las últimas ya no están representadas por secuencias de las primeras. Las extensiones de FP84 se logran eliminando la restricción de FP de que la construcción de secuencia se aplique solo a objetos que no sean: en FP84 todo el universo de expresiones (incluidas aquellas cuyo significado es ⊥) está cerrado bajo construcción de secuencia.
La semántica de FP84 está incorporada en un álgebra de programas subyacente, un conjunto de igualdades a nivel de función que pueden usarse para manipular y razonar sobre programas.
Referencias
- ^ La concepción, evolución y aplicación de lenguajes de programación funcionales Archivado el 11 de marzo de 2016 en la Wayback Machine Paul Hudak, 1989
- ↑ a b c Backus, J. (1978). "¿Puede la programación liberarse del estilo von Neumann ?: Un estilo funcional y su álgebra de programas" . Comunicaciones de la ACM . 21 (8): 613. doi : 10.1145 / 359576.359579 .
- ^ "Premio de la Asociación de Maquinaria de Computación AM Turing" (PDF) .
- ^ Yang, Jean (2017). "Entrevista a Simon Peyton-Jones" . Gente de lenguajes de programación .
- ^ Hague, James (28 de diciembre de 2007). "Arqueología de programación funcional" . Programación en el siglo XXI .
- Sacrificar la simplicidad por la conveniencia: ¿Dónde trazas la línea? , John H. Williams y Edward L. Wimmers, IBM Almaden Research Center, Actas del Decimoquinto Simposio Anual ACM SIGACT-SIGPLAN sobre Principios de Lenguajes de Programación, San Diego, CA, enero de 1988.
enlaces externos
- FP interactivo (requiere Java), página de ayuda
- FP trivia (alemán)