title: FP (lenguaje de programación)
text: # FP (lenguaje de programación)
  
  FP (abreviación de Functional Programming) es un lenguaje de programación creado por John Backus para apoyar la diseminación del paradigma de Programación a nivel funcional.
  
  ## Componentes del lenguaje
  
  ### Valores
  
  Las principales estructuras de datos del lenguaje son los valores de base y las secuencias:
  
  * Si $x_1,...,x_n$ son valores, también lo es la secuencia $⟨x_1,...,x_n⟩.$
  
  Estos valores se construyen a partir de cualquier conjunto de valores atómicos: booleanos, enteros, reales, caracteres, etc.
  
  * booleanos : {T, F}
  * enteros : {0,1,2,...,∞}
  * caracteres : {'a', 'b', 'c',...}
  * símbolos : {x, y,...}
  
  El símbolo ⊥ representa el valor indefinido. Las secuencias preservan el valor indefinido:
  
  * $⟨x_1,...,⊥,...,x_n⟩$ = ⊥
  
  ### Funciones
  
  Los programas en FP son funciones f tales que cada una hace corresponder un valor x en otro :
  
  * f:x representa el valor resultante de aplicar la función f a x.
  
  ### Funcionales
  
  Las funciones pueden estar predefinidas o ser definidas según las operaciones de construcción de programas o funcionales.
  
  Algunas funciones tienen elemento neutro, tal es el caso del valor 0 para la suma, o 1 para la multiplicación. El funcional unit produce ese valor al ser aplicado a una función f que posea elemento neutro:
  
  * unit + = 0
  * unit × = 1
  * unit foo = ⊥ si foo no posee elemento neutro.
  
  Los principales funcionales de FP son:
  
  * constante x̄: x̄:y = x
  
  para todo valor y (exceptuando el valor indefinido, ⊥, cuyo resultado es él mismo cualquiera sea la función aplicada).
  
  * composición f°g: f°g:x = f:(g:x)
  * construcción $[f_1,...f_n]:$ $[f_1,...f_n]:x$ = ⟨ $f_1:x,...,f_n:x$ ⟩
  * condición (h⇒f; g): (h⇒f; g):x = f:x si h:x = T, (h⇒f; g):x = g:x si h:x = F, y (h⇒f; g):x = ⊥ en caso contrario.
  * aplicar a todos o map αf: $αf:⟨x_1,...,x_n⟩$ = $⟨f:x_1,...,f:x_n⟩$
  * inserción a la izquierda /f: /f:⟨x⟩ = x, $/f:⟨x_1,x_2,...,x_n⟩$ = $f:⟨x_1,/f:⟨x_2,...,x_n⟩⟩,$ /f:⟨ ⟩ = unit f
  * inserción a la derecha \f: \f:⟨x⟩ = x, $\f:⟨x_1,x_2,...,x_n⟩$ = $f:⟨\f:⟨x_1,...,x_{n-1}⟩,x_n⟩,$ y \f:⟨ ⟩ = unit f
  
  ### Recursión
  
  Para introducir la recursión en el lenguaje se utilizan ecuaciones en donde la función que se define aparece tanto a izquierda como a derecha. La forma más sencilla es:
  
  * f ≡ Ef
  
  en donde E'f es una expresión construida a partir de otras funciones y el símbolo f combinadas con los funcionales del lenguaje.
  
  ### Primitivas
  
  Por ejemplo, las funciones de selección, que se denotan en FP con los símbolos 1,2,... corresponden a la siguiente especificación:
  
  * $1:⟨x_1,...,x_n⟩$ = $x_1$
  * $i:⟨x_1,...,x_n⟩$ = $x_i$ si 0 < i ≤ n = ⊥ en caso contrario
  * Datos: Q1474061
  