












































Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
curso de haskell de la materia de programacion funcional
Tipo: Diapositivas
1 / 52
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!













































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)
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.
http://www.haskell.org/aboutHaskell.html
Departamento de Electrónica, Sistemas Informáticos y Automática Pág. 5 Curso 2004-
Departamento de Electrónica, Sistemas Informáticos y Automática Pág. 7 Curso 2004-
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-
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
Declaración de una función ejemplo
Departamento de Electrónica, Sistemas Informáticos y Automática Pág. 17 Curso 2004-
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