La programación funcional se basa en el cálculo lambda y enfatiza el uso de funciones puras sin efectos secundarios. Los lenguajes funcionales como Lisp, Scheme y otros derivan del cálculo lambda y tratan a las funciones como datos de primer orden. La característica clave es evitar el cambio de estado mediante el uso de funciones matemáticas puras.
2. Programacion Funcional
En ciencias de la computación, la programación
funcional es un paradigma de programación
declarativa basado en la utilización de funciones
aritméticas que no maneja datos mutables o de
estado. Enfatiza la aplicación de funciones, en
contraste con el estilo de programación imperativa,
que enfatiza los cambios de estado.
3. Historia
Sus orígenes provienen del Cálculo Lambda (o λ-
cαlculo), una teoría matemática elaborada por
Alonso Church como apoyo a sus estudios sobre
Computabilidad. Un lenguaje funcional es, a grandes
rasgos, un azúcar sintáctico del Cálculo Lambda.
4. Calculo Lambda
Los orígenes teóricos del modelo funcional se
remontan a la década del 30, mas precisamente al
año 1934, cuando Alonso Church introdujo un
modelo matemático de computación llamado lambda
calculo. A pesar de que en esta época las
computadoras aun no existían el lambda cálculo se
puede considerar como el primer lenguaje funcional
de la historia y sus fundamentos fueron la base de
toda la teoría de la programación funcional y de los
lenguajes funcionales desarrollados posteriormente.
5. Programacion Declarativa
La característica fundamental del paradigma
declarativo es que no existe la asignación ni el
cambio de estado en un programa. Las variables son
identificadores de valores que no
cambian en toda la evaluación (como constantes
definidas con un DEFINE de C). Sólo
existen valores y expresiones matemáticas que
devuelven nuevos valores a partir de los
declarados.
6. Lenguajes Funcionales
Programar en un lenguaje funcional significa construir
funciones a partir de las ya existentes. Por lo tanto es
importante conocer y comprender bien las funciones
que conforman la base del lenguaje, así como las que
ya fueron definidas previamente. De esta manera se
pueden ir construyendo aplicaciones cada vez más
complejas.
7. Scheme
Scheme es un lenguaje compacto con un alto grado de
abstracción, por lo cual resulta adecuado para cursos
introductorios de computación, donde el énfasis está
en la metodología de resolución de problemas.
Scheme permite resolver problemas complejos con
programas cortos y elegantes. De este modo, el
lenguaje se convierte en un aliado para resolver
problemas, no un problema más que resolver.
8. Dualidad entre datos y
programas
Los programas en Scheme son expresiones entre
paréntesis (expresiones-S o S-expressions en
inglés)
Una expresión es una lista de símbolos
Esto permite tratar a los programas como datos y
viceversa utilizando la forma especial eval
9. Las ventajas de tener un lenguaje tan simple son:
-Permite definiciones simples.
-Facilita el estudio de aspectos computacionales.
-Su carácter formal facilita la demostración de
propiedades.
Aplicaciones
-Compilación de lenguajes funcionales. -Especificar
semántica a lenguajes imperativos.
-Formalismo para definir otras teorías.
10. Paradigma Funcional
En un sentido estricto, la programación funcional
define un programa como una función matemática
que convierte unas entradas en unas salidas, sin
ningún estado interno y ningún efecto lateral.
Otras características del paradigma funcional son las
siguientes:
-Recursión
-Funciones como tipos de datos primitivos
-Uso de listas
11. Funciones como datos de
primer orden
Las funciones son datos de primer orden de los
lenguajes funcionales.
Un dato de primer orden es aquel que:
-Puede ser asignado a una variable
-Puede ser pasado como argumento a una función
-Puede ser devuelto como resultado de una
invocación a una función
-Puede ser parte de un tipo mayor
12. Lenguaje LISP
LISP es el primer lenguaje de programación de alto
nivel basado en el paradigma funcional Creado en
1958 por John McCarthy LISP es un lenguaje
revolucionario e introduce nuevos conceptos de
programación: funciones como objetos primitivos,
funciones de orden superior, polimorfismo, listas,
recursión, símbolos, homogeneidad de datos y
programas.
13. Funciones
una función es un grupo de instrucciones con un
objetivo en particular y que se ejecuta al ser llamada
desde otra función o procedimiento. Una función
puede llamarse múltiples veces e incluso llamarse a
sí misma (función recurrente). Las funciones pueden
recibir datos desde afuera al ser llamadas a través de
los parámetros y deben entregar un resultado. Se
diferencian de los procedimientos porque estos no
devuelven un resultado.
14. Modelo de computación de
sustitución
Un modelo computacional es un formalismo
(conjunto de reglas) que definen el
funcionamiento de un programa.
En de los lenguajes funcionales basados en la
evaluación de expresiones, el modelo
computacional define cuál va a ser el resultado de
evaluar una determinada expresión.
El modelo de sustitución se basa en una versión
simplificada de la regla de reducción del cálculo
lambda.
15. Orden normal vs. orden
aplicativo
-Orden aplicativo: cuando se llega a una
expresión primitiva se evalúa
-Orden normal: se realizan todas las
sustituciones hasta que se tiene una larga
expresión formada por expresiones
primitivas; se evalúa entonces
-Scheme utiliza el orden aplicativo