Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


programacion funcional, Diapositivas de Programación Funcional

curso de haskell de la materia de programacion funcional

Tipo: Diapositivas

2019/2020

Subido el 17/06/2020

gonzalo-flores-8
gonzalo-flores-8 🇧🇴

1 documento

1 / 52

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
Programación Declarativa
Curso 2004-2005
Departamento de Electrónica, Sistemas Informáticos y Automática
Universidad de Huelva
Tema 5: Introduccn a la
programación funcional.
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34

Vista previa parcial del texto

¡Descarga programacion funcional y más Diapositivas en PDF de Programación Funcional solo en Docsity!

Programación Declarativa

Curso 2004- Departamento de Electrónica, Sistemas Informáticos y Automática Universidad de Huelva

Tema 5: Introducción a la

programación funcional.

Departamento de Electrónica, Sistemas Informáticos y Automática Pág. 2 Curso 2004-

Qué es la programación Funcional (I)

  • La programación funcional apareció como un

paradigma independiente a principio de los

sesenta.

  • Su creación es debida a las necesidades de los

investigadores en el campo de la inteligencia

artificial y en sus campos secundarios del cálculo

simbólico, pruebas de teoremas, sistemas basados

en reglas y procesamiento del lenguaje natural.

  • Estas necesidades no estaban cubiertas por los

lenguajes imperativos de la época.

Departamento de Electrónica, Sistemas Informáticos y Automática Pág. 4 Curso 2004- Universidad de Huelva

Qué es la programación Funcional (III) Cualquiera que haya programado una hoja de cálculo conoce la experiencia de la programación funcional.

  • En una hoja de cálculo, se especifica cada celda en terminos de los valores de otras celdas. El objetivo es que debe ser calculado y no en como debe calcularse. Por ejemplo:
  • No especificamos el orden en el que las celdas serán calculadas, en cambio obtenemos el orden que garantiza que la hoja de cálculo puede calcular las celdas respetando las dependencias.
  • No indicamos a la hoja de cálculo como manejar la memoria, en cambio esperamos que nos presente un plano de celdas, aparentemente infinito, pero que solo utiliza la memoria de las celdas que están actualmente en uso.
  • Lo más importante, especificamos el valor de una celda por una expresión (cuyas partes pueden ser evaluadas en cualquier orden), en vez de una secuencia de comandos que calculan los valores.

http://www.haskell.org/aboutHaskell.html

Departamento de Electrónica, Sistemas Informáticos y Automática Pág. 5 Curso 2004-

¿Por qué Haskell?

• Haskell es un lenguaje funcional puro

• Haskell no es un lenguaje muy rápido, pero

se prioriza el tiempo del programador sobre

el tiempo de computación.

Departamento de Electrónica, Sistemas Informáticos y Automática Pág. 7 Curso 2004-

Haskell Brooks Curry

Experto en lógica simbólica, trabajó en el primer ordenador electrónico llamado ENIAC (Electronic Numerical Integrator and Computer) durante Segunda Guerra Mundial. Trabajó en los 50 en los fundamentos de la lógica combinatoria y los aplicó en Mitre Corporation Curry Chip en 1986 un innovador elemento hardware basado en los conceptos de combinatoria de Curry.

http://www.research.psu.edu/history/history3.shtml

Departamento de Electrónica, Sistemas Informáticos y Automática Pág. 8 Curso 2004-

En Matemáticas, una función f entre dos conjuntos A y B, llamados conjuntos inicial y final, es una correspondencia que a cada elemento de un subconjunto de A, llamado “Dominio de f”, le hace corresponder uno y sólo uno de un subconjunto B llamado “Imagen de f”.

f: A ‡ B f(x) ‡ ....

Ejemplo:

sucesor: Z ‡ Z

sucesor(x) ‡ x + 1

pi: R pi ‡ 3.

Las constantes son funciones que no tienen parámetros y devuelven siempre lo mismo

Función matemática

Departamento de Electrónica, Sistemas Informáticos y Automática Pág. 10 Curso 2004-

Las líneas anteriores representan “una sesión” o un

diálogo con el evaluador.

Le pedimos a Haskell que calculase el valor de la

expresión “1 + 3” y éste respondió “4 :: Integer”

También podemos definir funciones con una sintaxis

muy cercana a la matemática, de ahí la facilidad a la

hora de escribir programas, ya que serán meras

implementaciones de las funciones matemáticas.

Sesiones y declaraciones (II)

Departamento de Electrónica, Sistemas Informáticos y Automática Pág. 11 Curso 2004-

En Haskell se puede trabajar con diferentes tipos de datos. Cada valor tiene un tipo y hay tipos que están predefinidos, como los enteros, los reales, etc...

Prelude> cos(-2*pi) 1.0 :: Double

Existen otros tipos de datos más complejos

Prelude> [1..5] [1,2,3,4,5] :: [Integer] Prelude> sum [1..5] 15 :: Integer

Tipos de datos

Departamento de Electrónica, Sistemas Informáticos y Automática Pág. 13 Curso 2004-

λ- Cálculo

Fue concebido originalmente por el lógico-matemático Alonzo Church en los años 30 como parte de una teoría general para modelar funciones y lógica de orden superior.

Haskell es un lenguaje descrito como un λ- Cálculo extendido

Definición: Dado un conjunto(infinito numerable) de variables V y un conjunto C de constantes, el conjunto Λ de los términos del λC queda definido por la sintaxis

Λ ::= V | C | (λV.Λ) | (Λ Λ)

Donde λx.M representa la función x‡M

Departamento de Electrónica, Sistemas Informáticos y Automática Pág. 14 Curso 2004-

Para la función

f: A ‡ B x ‡ 2x + 1

Podemos escribirla como una λ-expresión de la forma

λx.2x+

Ejemplo:

f(x,y) = (x + y)* λx ‡ λy ‡ (x + y) * 2

Se expresaría en λCalculo como

λx. λy. * (+ x y) 2

Departamento de Electrónica, Sistemas Informáticos y Automática Pág. 16 Curso 2004-

Vamos a definir nuestra primera función en Haskell, que calcule El sucesor de un numero entero sucesor :: Integer ‡ Integer

sucesor x = x + 1 “sucesor” es el nombre de la función

  • La primera línea es una declaración de tipos e indica que sucesor es una función de enteros en enteros
  • La segunda línea es una ecuación, y proporciona la forma de cálculo del valor de esa función.

Declaración de una función ejemplo

Departamento de Electrónica, Sistemas Informáticos y Automática Pág. 17 Curso 2004-

Ej:

Main> sucesor 3 4 :: Integer Main> sucesor 3 * 4 16 :: Integer Main> sucesor (3 * 4) 13 :: Integer

Siempre que no se especifiquen los paréntesis, se supondrá que la expresión viene en forma currificada

Declaración de una función ejemplo (II)

Departamento de Electrónica, Sistemas Informáticos y Automática Pág. 19 Curso 2004-

Una expresión se reduce sustituyendo, en la parte derecha de la ecuación de la función, los Parámetros Formales o argumentos por los que aparecen en la llamada(también llamados Parámetros Reales o Parámetros ).

Cuando una expresión no pueda reducirse más, se dice que está en Forma Normal

Es importante el orden en el que se aplican las reducciones, y dos de los mas interesantes son:

Aplicativo y Normal

Reducción de Expresiones (II)

Departamento de Electrónica, Sistemas Informáticos y Automática Pág. 20 Curso 2004-

Se reduce siempre el término MAS INTERNO (el más anidado en la expresión). En caso de que existan varios términos a reducir (con la misma profundidad) se selecciona el que aparece más a la izquierda de la expresión.

Esto también se llama “ paso de parámetros por valor ”, ya que ante una aplicación de una función, se reducen primero los parámetros de la función.

A los evaluadores que utilizan este tipo de orden, se les llama “ estrictos o impacientes

Orden Aplicativo