Está en la página 1de 58

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?