PARADIGMA
PROGRAMACIÓN FUNCIONAL
● SERGIO IVÁN SÁNCHEZ PLAZAS
● NICOLÁS PARRA RAMOS
● JOSE DANIEL SUAREZ JURADO
● HEYNER STIVEN MARTINEZ ARENAS
Orígenes
Un poco de historia
Alonzo Church
Trabajaba en la Universidad de Princeton, y al igual que
otros matemáticos de allí, estaba interesado en la
matemática abstracta, particularmente en el poder
computacional de ciertas máquinas abstractas
Alonzo Church
Si tuviéramos máquinas de un ilimitado poder de
cómputo
¿Qué tipos de problemas se podrían solucionar?
¿Se pueden resolver todos los problemas?
Cálculo Lambda
Realizaba evaluación de expresiones usando funciones
como mecanismo de cómputo. Este lenguaje abstracto no
tenía en cuenta limitaciones concretas de implementación
de ningún tipo.
Cálculo Lambda
- Sintaxis básica
- Semántica para el concepto de función como proceso
de transformación de argumentos en resultados
- Un medio para definir primitivas de programación
Cálculo Lambda
- Sintaxis
Alan Turing
Desarrolló una máquina abstracta para intentar
resolver el mismo tiempo de problemas planteados por
Church. Después se demostró que ambos enfoques son
equivalentes
Von-Neumann
vs
Programación
Funcional
Memoria
Los programas procedimentales poseen variables.
La programación funcional pura, las variables no
son necesarias
PROGRAMACIÓN
FUNCIONAL
Programación Funcional
Los programas se construyen mediante la composición
de funciones, de manera que una función realiza su
trabajo llamando a otras funciones cada vez más
simples hasta alcanzar las primitivas del lenguaje.
CARACTERÍSTICAS
Programación Funcional
Composición de funciones.
Funciones de orden superior
Reciben una función como argumento o retornan una
función como resultado.
Pruebas Unitarias
Inmutabilidad
★ El único efecto de evaluar una función, es su valor
de retorno y sus argumentos son la única cosa que
afecta el valor de retorno de la función.
★ No hay que preocuparse por llamar las funciones
en un orden correcto.
★ Todo lo que se necesita es pasar a la función los
argumentos que representan los casos de prueba.
Uso de Recursividad
No iteración
ITERACIÓN
RECURSIVIDAD
Factorial en Haskell: Factorial en Python:
Transparencia Referencial
Funciones Puras.
Transparencia Referencial
Este concepto se refiere a la propiedad de
los lenguajes funcionales que hace que la
misma expresión siempre represente el
mismo valor.
La evaluación de una expresión depende
única y exclusivamente de sus parámetros
de entrada.
Ausencia de efectos colaterales
Una función sólo retorna un valor y no produce
cambios de estado.
Ausencia de efectos colaterales
En programación funcional el llamar a una función
múltiples veces con las mismas entradas, siempre
devolverá los mismos resultados.
LENGUAJES
Programación Funcional
FUNCIONALES: CON CARACTERÍSTICAS
FUNCIONALES:
ELM
VENTAJAS
Ventajas
La programación paralela es mucho más simple.
No dependemos de variables que haya que sincronizar ni tenemos que
implementar métodos para validar que solo se pueda entrar en ciertos
bloques por un solo hilo lo que nos ayuda a hacer todo mucho más
simple
Las aplicaciones escritas con código funcional suelen tener mucho
menos código.
DESVENTAJAS
Desventajas
Cuando hablamos de programación funcional hablamos de matemáticas
llevadas a la programación.
El uso constante de la recursión
El cambio de paradigma desde la programación orientada a objetos
CONCLUSIONES
Paradigma de Programación
Funcional
USO
● Erlang, el cual fue desarrollado para poner en práctica
sistemas de tolerancia a fallos en las
telecomunicaciones.
● Uso del Scheme de Lisp, que fue usado como base en el
desarrollo de aplicaciones para los primeros
ordenadores de la firma Apple Macintosh.
● desarrollo de sistemas de simulación y de control de
telescopio.
USO
● Haskell, es un ejemplo de lenguaje que se creó con
propósito de lenguaje de investigación pero que se ha
usado para el desarrollo de sistemas aeroespaciales,
programación web y diseño de hardware.
● Entre otros...
PRÁCTICA
Paradigma de Programación
Funcional
Haskell
Instalación:
https://www.haskell.org/platform/
Windows
Descargar el instalador de
https://www.haskell.org/platform/#windows
Linux
sudo apt-get install haskell-platform
Guardar un archivo con extensión .hs
Otra manera de ejecutar es escribiendo
directamente es escribiendo gchi en la consola
Podemos cargar archivos desde ghci
Operaciones básicas con listas
Listas Intencionales
Conjuntos definidos matemáticamente de forma intensiva:
Definición en Haskell
Listas Intencionales
Añadiendo una nueva condición (o predicado), obtener solo, los elementos
que sean mayor o igual a doce:
Listas Intencionales
Combinando funciones con listas intencionales:
Resultado:
¿Qué genera la siguiente expresión?
Tuplas
Las tuplas se definen con paréntesis y sus valores se separan en comas:
Tuplas
Funciones sobre duplas:
fst toma una dupla y devuelve su primer componente:
snd toma una dupla y devuelve su segundo componente:
ZIP
La función nos retorna una dupla dada dos
listas.
¿Cual es la principal diferencia entre una lista y
una tupla?
Ejercicios Prácticos
Sumar elementos de una lista:
Ejercicios Prácticos
Evaluación de la función:
Ejercicios Prácticos
Aproximación del número pi:
Fórmula:
Haskell
REFERENCIAS
Paradigma de Programación
Funcional
● https://rua.ua.es/dspace/bitstream/10045/4
032/1/tema02.pdf
● https://www.ucasal.edu.ar/htm/ingenieria/c
uadernos/archivos/3-p63-Rivadera.pdf
● http://www.newthinktank.com/2015/08/lear
n-haskell-one-video/
GRACIAS!
Alguna pregunta?