Programación funcional

Tamaño: px
Comenzar la demostración a partir de la página:

Download "Programación funcional"

Transcripción

1 Programación funcional Inferencia de tipos manual para programas Haskell J. Sánchez Hernández Enero de 2007 El sistema de tipos de Haskell Es una variante del propuesto R. Milner en 1978 (con antecedentes en J.R. Hindley, 1969). admite polimorfismo paramétrico toda expresión tiene un tipo principal, o bien no es tipable hay un algoritmo de inferencia para deducir el tipo principal de cualquier expresión (o decidir que está al tipada).

2 Tipo de una expresion Se siguen los siguientes pasos: 1 Decorar de la forma id :: <tipo> cada identificador id (de variable o de función) y cada resultado de una aplicación (bien sea de función o de constructora) con una instancia fresca de su tipo si se conoce o con una variable fresca a en caso contrario, teniendo en cuenta que: las apariciones de una variable en la misma expresión han de estar decoradas con el mismo tipo (puesto que deben tener el mismo tipo) cada aparición de una función con tipo conocido ha de tener una instancia fresca de su tipo (polimórfico). las tuplas (e 1,..., e n ) pueden decorarse directamente con (a 1,..., a n ) 2 Generar las ecuaciones según la siguiente regla: e 0 :: t 0 e 1 :: t 1... e n :: t n (e 0 e 1... e n ) :: t t 0 = t 1... t n t Tipo para una regla de función 3 Resolver las ecuaciones generadas mediante un algoritmo de unificación, teniendo en cuenta que: las tuplas y listas (y cualquier otra constructora) se descomponen de manera ordinaria. Por ejemplo la ecuación (t 1, t 2 ) = (t 1, t 2 ) se descompone en las dos ecuaciones t 1 = t 1, t 2 = t 2 y [t 1] = [t 2 ] se descompone en t 1 = t 2. el constructor de tipo se comporta como una constructora mas, i.e., una ecuación de la forma t 1 t 2 = t 1 t 2 se descompone en dos ecuaciones t 1 = t 1, t 2 = t 2 Si el algoritmo tiene éxito proporciona el tipo principal para la expresión (y cada una de sus subexpresiones). Si falla, la expresión está mal tipada. Nota: recordemos que la aplicación asocia por la izquierda y el operador por la derecha.

3 Algoritmo de unificación de Martelli-Montanari Aplicar alguna de las siguientes reglas mientras sea posible: 1. S {X = X } S 2. S {f (t 1,..., t n )=f (s 1,..., s n )} S {t 1 =s 1,..., t n =s n } 3. S {f (t 1,..., t n ) = g(s 1,..., s m )} FALLO, si f g (ó n m) 4. S {X = t} S[X /t] {X = t}, si X var(t), X var(s), X t 5. S {X = t} FALLO, si X var(t) 6. S {t = X } S {X = t}, si t V Este algoritmo proporciona u.m.g. s idempotentes Ejemplo Supongamos la expresión: True == (False (not False)) Sabemos que: (==) :: a a Bool y que not :: Bool Bool, ( ) :: Bool Bool Bool. Para facilitar las cosas ponemos la expresión en forma prefija Decoramos: (==) True (( ) False (not False)) ((==) :: a a Bool True :: Bool (( ) :: Bool Bool Bool False :: Bool (not :: Bool Bool False :: Bool) :: b ) :: c ) :: d

4 Ecuaciones: Bool Bool = Bool b Bool Bool Bool = Bool b c a a Bool = Bool c d Resolvemos: a = Bool, b = Bool, c = Bool, d = Bool Otro ejemplo: map (+1) [2] Para facilitar las cosas utilizamos notación prefija en todos los operadores y la lista [2] la escribimos de la forma (:) 2 [], sabiendo que: (:) :: a [a] [a] Inferencia de tipos para reglas de función f p }{{} cabeza = e }{{} cuerpo Se decora la cabeza y el cuerpo, y se plantean las ecuaciones del mismo modo, pero con una ecuación adicional entre el tipo de la cabeza y el del cuerpo. Si hay guardas también se decoran y se plantean las ecuaciones oportunas. Ejemplo: cua x = x x (suponiendo ( ) :: Int Int Int) Decoramos: (cua::a x::b)::c = ((*)::Int Int Int x::b x::b)::d Ecuaciones: {a = b c, Int Int Int = b b d, c = d} Resolvemos: b = Int, c = Int, d = Int, a = Int Int (luego cua :: Int Int)

5 Tipo para funciones Se decora cada una de las reglas de función, anotando el mismo tipo en todas las reglas para todas las apariciones de la función que se está definiendo. Si el algoritmo de unificación tiene éxito el tipo obtenido para la función es el tipo más general. Si no tiene éxito, la función está mal tipada. Si la función tiene tipo declarado se comprueba que dicho tipo sea una instancia del tipo inferido, i.e., que el tipo inferido es más general que el declarado. Si es así, se anota el tipo declarado para la función, en otro caso, error. Tipo para lambda-expresiones λx e se decoran x, e y la propia lambda expresión del modo habitual, (λx :: a e decorada :: b) :: c se plantean las ecuaciones resultantes de e decorada y una ecuación adicional c = a b se resuelve del modo ordinario Las λ-expresiones con más de un argumento se reducen al caso de un argumento. Por ejemplo: λx y e) se decora como (λx :: a 1 (λy :: a 2 e decorada :: a 3 ) :: a 4 ) :: a 5 y se añaden las ecuaciones adicionales: a 4 = a 2 a 3, a 5 = a 1 a 4

6 Tipo para expresiones con let let in e <defs. locales>... Las definiciones locales: se decoran del modo habitual, se plantean las ecuaciones y se resuelven. Para la expresión externa: Se decora e utilizando los tipos inferidos en el paso anterior: el tipo de las variables globales queda congelado (no se toman instancias frescas) para el resto de variables/funciones se toman instancias frescas Se plantean y resuelven las ecuaciones del modo habitual. Ejemplo Sea h x y = (x, y) con el tipo ya inferido h :: a b (a, b) y f x = let g y = h x y in (x, g 3, g x, g True) Decoramos la definición local: (g :: a 1 y :: a 2 ) :: a 3 = (h :: a 4 a 5 (a 4, a 5 ) x :: a 6 y :: a 2 ) :: a 7 Ecuaciones: a 1 = a 2 a 3, a 4 a 5 (a 4, a 5 ) = a 6 a 2 a 7, a 3 = a 7 Resolvemos: a 1 = a 2 (a 4, a 2 ), a 3 = (a 4, a 2 ), a 6 = a 4, a 5 a 2, a 7 = (a 4, a 2 ) Lo que nos interesa: g :: a 2 (a 4, a 2 ) y x :: a 4, con a 4 congelada g :: a 2 (a 4, a 2 ) x :: a 4

7 Ahora procedemos con la expresión externa: Cada aparición de g utiliza una instancia fresca del tipo inferido x :: a 4 es variable global (externa) a 4 Decorando: queda congelado (f :: c 0 x :: a 4 ) :: c 1 = ( x :: a 4, (g :: b 1 (a 4, b 1) 3 :: Int) :: a 8, (g :: b 3 (a 4, b 3) x :: a 4 ) :: a 9, (g :: b 5 (a 4, b 5) True :: Bool) :: a 10 ) :: (c 2, c 3, c 4, c 5 ) Resolviendo tenemos f :: a 4 (a 4, (a 4, Int), (a 4, a 4 ), (a 4, Bool)) Ejercicio: f x = let g y = h x y in (fst (g 3) + fst (g x), g True) Tipo para programas En general, si una función f utiliza otra g en su definición el tipo de g deberá inferirse antes que el tipo de f.... pero puede haber funciones mútuamente recursivas, cuyo tipo ha de inferirse simultáneamente. Esto hace que el algoritmo sea algo más sofisticado de lo que cabría esperar: Construir el grafo de dependencias funcionales: los nodos son los nombre de función; si f utiliza g en su definición habrá un arco de f a g. Determinar las componentes fuertemente conexas del grafo (que corresponden a definiciones mutuamente recursivas). Calcular la ordenación topológica de dichas componentes. Los tipos se inferiran en dicho orden.

8 Ejemplo even 0 = True even n = odd (n-1) odd 0 = False odd n = even (n-1) Recursión mutua! Los tipos se infieren a la vez: se decoran todas las reglas y se plantean las ecuaciones correspondientes. Inferencia de tipos con sistema de clases El algoritmo es esencialmente el mismo, pero se anotan las cualificaciones/restricciones de tipo al decorar las expresiones se propagan al resolver las ecuaciones. Además cuando una misma variable está afectada por dos restricciones de clase se conserva la más restriciva Eq a y Ord a se simplificaría a Ord a (todo tipo ordenado es en particular un tipo con igualdad)

9 Ejemplo cua x = x x, sabiendo ( ) :: Num a a a a Decoramos: (cua :: a 1 x :: a 2 ) :: a 3 = (( ) :: Num a 4 a 4 a 4 a 4 x :: a 2 x :: a 2 ) :: a 3 Ecuaciones + Restricciones a 1 = a 2 a 3, a 4 a 4 a 4 = a 2 a 2 a 3 Numa 4 Resolvemos: a 1 = a 2 a 2 a 2, a 3 = a 2, a 4 = a 2 Num (a 2, a 3, a 4 ) Tenemos cua :: Num a 2 :: a 2 a 2 a 2

Tipos en Haskell. Cecilia Manzino

Tipos en Haskell. Cecilia Manzino Tipos Tipo: conjunto de valores asociados a operaciones. Ejemplos: enteros, caracteres, booleanos, funciones de enteros a enteros. Sirven para: detectar errores antes de la evaluación especificar programas

Más detalles

Tema II: Introducción al Lenguaje Funcional

Tema II: Introducción al Lenguaje Funcional Tema II: Introducción al Lenguaje Funcional Características de Haskell Lenguaje funcional de o. superior fuertemente tipificado. Clasifica los entes de un programa en: objetos (constantes y funciones)

Más detalles

Algoritmos y programas. Algoritmos y Estructuras de Datos I

Algoritmos y programas. Algoritmos y Estructuras de Datos I Algoritmos y programas Algoritmos y Estructuras de Datos I Primer cuatrimestre de 2012 Departamento de Computación - FCEyN - UBA Programación funcional - clase 1 Funciones Simples - Recursión - Tipos de

Más detalles

Programación Declarativa Haskell Informática Sistemas Curso Pepe Gallardo Universidad de Málaga. Tema 8. Listas

Programación Declarativa Haskell Informática Sistemas Curso Pepe Gallardo Universidad de Málaga. Tema 8. Listas Programación Declarativa Haskell Informática Sistemas Curso 2003-2004 Pepe Gallardo Universidad de Málaga Tema 8. Listas 8.1 Secuencias aritméticas 8.2 Algunas funciones predefinidas 8.3 Listas por comprensión

Más detalles

Paradigma Funcional Caso de estudio: ML. Lenguajes de Programación 2018

Paradigma Funcional Caso de estudio: ML. Lenguajes de Programación 2018 Paradigma Funcional Caso de estudio: ML Lenguajes de Programación 2018 FUNCIÓN: Mapeo de un dominio en un rango El mapeo se puede describir por medio de una EXPRESIÓN f(1) = 2 f(2) = 3 Enumeración f(x)

Más detalles

Tipos algebraicos y abstractos. Algoritmos y Estructuras de Datos I. Tipos algebraicos

Tipos algebraicos y abstractos. Algoritmos y Estructuras de Datos I. Tipos algebraicos Algoritmos y Estructuras de Datos I 1 cuatrimestre de 009 Departamento de Computación - FCEyN - UBA Programación funcional - clase Tipos algebraicos Tipos algebraicos y abstractos ya vimos los tipos básicos

Más detalles

n! = 1 2 n 0! = 1 (n+1)! = (n + 1) n!

n! = 1 2 n 0! = 1 (n+1)! = (n + 1) n! Capítulo 3 Recursión La recursión es un estilo autoreferencial de definición usado tanto en matemática como en informática. Es una herramienta de programación fundamental, particularmente importante para

Más detalles

Paradigma Funcional Caso de estudio: ML. Lenguajes de Programación 2017

Paradigma Funcional Caso de estudio: ML. Lenguajes de Programación 2017 Paradigma Funcional Caso de estudio: ML Lenguajes de Programación 2017 Paradigma Funcional FUNCIÓN: Mapeo de un dominio en un rango El mapeo se puede describir por medio de una EXPRESIÓN f(1) = 2 f(2)

Más detalles

Lenguajes funcionales: λ-cálculo

Lenguajes funcionales: λ-cálculo Lenguajes funcionales: λ-cálculo λ-cálculo (Church 1933) Cálculo para el estudio formal del comportamiento de las funciones Sintaxis: λ expresiones Reglas de reducción de λ expresiones Método matemático

Más detalles

Guía 2: Listas, recursión e inducción

Guía 2: Listas, recursión e inducción Introducción a los Algoritmos - 2do cuatrimestre 2014 Guía 2: Listas, recursión e inducción Docentes: Walter Alini, Luciana Benotti En esta guía comenzaremos a trabajar con listas Para familiarizarnos

Más detalles

Guardas y Tipos de datos

Guardas y Tipos de datos Guardas y Tipos de datos Taller de Álgebra I 1er Cuatrimestre 2017 Definiciones de funciones por casos Podemos usar guardas para definir funciones por casos: f (n) = { 1 si n = 0 0 si no f n n == 0 = 1

Más detalles

Inferencia de Tipos Breves apuntes de la clase

Inferencia de Tipos Breves apuntes de la clase Inferencia de Tipos Breves apuntes de la clase 1. Introducción En lo que va de la materia hasta aquí hemos atacado los lenguajes de programación funcional. Vimos que en ellos el concepto de tipado es muy

Más detalles

El sistema de clases de Haskell. Introducción

El sistema de clases de Haskell. Introducción Capítulo 5. El sistema de clases de Haskell 56 El sistema de clases de Haskell Introducción Función monomórfica: sólo se puede usar para valores de un tipo concreto not :: Bool Bool not True = False not

Más detalles

Tema 4: Definición de funciones

Tema 4: Definición de funciones Tema 4: Definición de funciones Informática (2010 11) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla 2 / 30 Tema 4: Definición

Más detalles

Tema 4: Definición de funciones

Tema 4: Definición de funciones Programación declarativa (2009 10) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla Constantes como patrones Variables como

Más detalles

Tema 3: Tipos y clases

Tema 3: Tipos y clases Tema 3: Tipos y clases Informática (2016 17) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla 2 / 32 IM Tema 3: Tipos y clases

Más detalles

Tema 3: Tipos y clases

Tema 3: Tipos y clases Tema 3: Tipos y clases Informática (2017 18) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla 2 / 32 IM Tema 3: Tipos y clases

Más detalles

Introducción a OCaml. October 19, 2015

Introducción a OCaml. October 19, 2015 Introducción a OCaml October 19, 2015 OCaml: introducción Es un dialecto de ML. Lenguaje de programación funcional. Fuertemente tipado. Con inferencia de tipos. Polimórfico. [Página oficial: http://www.ocaml.org/

Más detalles

Tema 3: Tipos y clases

Tema 3: Tipos y clases Tema 3: Tipos y clases Programación declarativa (2009 10) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla Tema 3: Tipos y clases

Más detalles

Tema 3: Tipos y clases

Tema 3: Tipos y clases Tema 3: Tipos y clases Programación declarativa (2010 11) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla Tema 3: Tipos y clases

Más detalles

Informática Haskell Matemáticas Curso Pepe Gallardo Universidad de Málaga. Tema 8. Listas

Informática Haskell Matemáticas Curso Pepe Gallardo Universidad de Málaga. Tema 8. Listas Informática Haskell Matemáticas Curso 2004-2005 Pepe Gallardo Universidad de Málaga Tema 8. Listas 8.1 Secuencias aritméticas 8.2 Algunas funciones predefinidas 8.3 Listas por comprensión Ejemplo: QuickSort

Más detalles

Tema 7. El sistema de clases

Tema 7. El sistema de clases Programación Declarativa Haskell Informática Sistemas Curso 2003-2004 Pepe Gallardo Universidad de Málaga Tema 7. El sistema de clases 7.1 Funciones Sobrecargadas Clases e Instancias 7.2 Algunas Clases

Más detalles

Introducción a Haskell. Cecilia Manzino

Introducción a Haskell. Cecilia Manzino Paradigmas de programación Un paradigma de programación representa un estilo particular o filosofía para la construcción del software. Los más comunes dan lugar a los siguientes tipos de programación:

Más detalles

Tipos de datos algebraicos

Tipos de datos algebraicos Tipos de datos algebraicos Taller de Álgebra I Segundo cuatrimestre de 2013 Programación funcional Recordemos que un tipo de datos es un conjunto dotado con una serie de operaciones sobre los elementos

Más detalles

Guía 2: Funciones, listas, recursión e inducción

Guía 2: Funciones, listas, recursión e inducción Introducción a los Algoritmos - 1er cuatrimestre 2013 Guía 2: Funciones, listas, recursión e inducción El objetivo de los siguientes ejercicios es introducirnos en la programación funcional, es decir,

Más detalles

Funciones Segunda parte

Funciones Segunda parte Expresiones condicionales Matemática Discreta usando el computador 2011 Funciones Segunda parte Una expresión condicional utiliza una expresión de tipo Bool para decidir entre dos opciones Estructura if...then...

Más detalles

Tema 6: Funciones recursivas

Tema 6: Funciones recursivas Tema 6: Funciones recursivas Programación declarativa (2009 10) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla Tema 6: Funciones

Más detalles

Análisis semántico: Comprobación de tipos

Análisis semántico: Comprobación de tipos Análisis semántico: Comprobación de tipos Expresiones de tipos, sistemas de comprobación de tipos, equivalencia, resolución de sobrecargas y unificación. Introducción Objetivo de comprobación estática:

Más detalles

Tema 4. Funciones de orden superior

Tema 4. Funciones de orden superior Programación Declarativa Haskell Informática Sistemas Curso 2003-2004 Pepe Gallardo Universidad de Málaga Tema 4. Funciones de orden superior 4.1 Funciones de orden superior 4.2 Expresiones lambda 4.3

Más detalles

Introducción a Haskell. El lenguaje Haskell

Introducción a Haskell. El lenguaje Haskell Capítulo 2. Introducción a Haskell 9 Introducción a Haskell Un ejemplo de fichero Haskell El lenguaje Haskell Haskell es un lenguaje funcional puro, no estricto y fuertemente tipificado. Puro = transparencia

Más detalles

Tema 2: Introducción a Haskell

Tema 2: Introducción a Haskell El Lenguaje Haskell Tema 2: Introducción a Haskell A. Chávez-González 1 A. Riscos-Núñez 1 F. Sancho-Caparrini 1 1 Departamento de Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla

Más detalles

Tema 2. Tipos predefinidos

Tema 2. Tipos predefinidos Programación Declarativa Haskell Informática Sistemas Curso 2003-2004 Pepe Gallardo Universidad de Málaga Tema 2. Tipos predefinidos 2.1 Tipos simples predefinidos El tipo Bool El tipo Int El tipo Integer

Más detalles

Definiciones de tipo. Sinónimos de tipo

Definiciones de tipo. Sinónimos de tipo Capítulo 4. Definiciones de tipo 40 Definiciones de tipo Sinónimos de tipo Un sinónimo de tipo renombra un tipo existente. El nuevo nombre y el antiguo son totalmente intercambiables. type Entero =Integer

Más detalles

Tema 3. Patrones y Definiciones de Funciones

Tema 3. Patrones y Definiciones de Funciones Informática Haskell Matemáticas Curso 2004-2005 Pepe Gallardo Universidad de Málaga Tema 3. Patrones y Definiciones de Funciones 3.1 Comparación de Patrones Patrones constantes Patrones para listas Patrones

Más detalles

Para entender la recursividad primero tenemos que entender la recursividad

Para entender la recursividad primero tenemos que entender la recursividad Para entender la recursividad primero tenemos que entender la recursividad Funcional Clase 1 Matias Reparaz, Agustín Nieto Departamento de Computación, FCEyN,Universidad de Buenos Aires. 20 de Septiembre

Más detalles

1.1 Define un operador ( ) que devuelva True si y solo si tan solo uno de sus argumentos es True. Por ejemplo:? (3 > 2) (2 > 5)

1.1 Define un operador ( ) que devuelva True si y solo si tan solo uno de sus argumentos es True. Por ejemplo:? (3 > 2) (2 > 5) 1 Informática Haskell Matemáticas Curso 2004-2005 Pepe Gallardo Universidad de Málaga Práctica 1 1.1 Define un operador ( ) que devuelva True si y solo si tan solo uno de sus argumentos es True. Por ejemplo:?

Más detalles

Tema 4. Funciones de orden superior

Tema 4. Funciones de orden superior Informática Haskell Matemáticas Curso 2004-2005 Pepe Gallardo Universidad de Málaga Tema 4. Funciones de orden superior 4.1 Funciones de orden superior 4.2 Expresiones lambda 4.3 Aplicación parcial Secciones

Más detalles

Listas y Recursión. Taller de Álgebra I. Primer Cuatrimestre de 2015

Listas y Recursión. Taller de Álgebra I. Primer Cuatrimestre de 2015 Listas y Recursión Taller de Álgebra I Primer Cuatrimestre de 2015 Un nuevo tipo: Listas Tipo Lista Las listas pueden contener elementos de cualquier tipo (incluso listas) [1] :: [Integer] [1, 2] :: [Integer]

Más detalles

Matemáticas para la Empresa

Matemáticas para la Empresa Matemáticas para la Empresa 1 o L. A. D. E. Curso 2008/09 Relación 1. Espacios Vectoriales 1. a) En IR 2 se consideran las operaciones habituales: (x, y) + (x, y ) = (x + x, y + y ) λ(x, y) = (λx, λy)

Más detalles

I Programación funcional básica con Haskell 98 1

I Programación funcional básica con Haskell 98 1 Índice General Prólogo Convenios i xxiii I Programación funcional básica con Haskell 98 1 0 Programación funcional 3 0.0 Funciones............................... 3 0.1 Sesiones y declaraciones.......................

Más detalles

GUÍA BÁSICA DE SCHEME v.4

GUÍA BÁSICA DE SCHEME v.4 Esta guía básica pretende ser una introducción elemental al lenguaje de programación Scheme. Se presenta como una guía de comienzo rápido de tal forma que permita conocer de una forma muy esquemática los

Más detalles

Introducción a la programación funcional

Introducción a la programación funcional Introducción a la programación funcional Salvador Lucas Alba Departamento de Sistemas Informáticos y Computación Universidad Politécnica de Valencia http://www.dsic.upv.es/users/elp/slucas.html Objetivos

Más detalles

Tema 3. Patrones y Definiciones de Funciones

Tema 3. Patrones y Definiciones de Funciones Programación Declarativa Haskell Informática Sistemas Curso 2003-2004 Pepe Gallardo Universidad de Málaga Tema 3. Patrones y Definiciones de Funciones 3.1 Comparación de Patrones Patrones constantes Patrones

Más detalles

Laboratorio Análisis Lógico Práctica 2: Tipos de datos en Haskell

Laboratorio Análisis Lógico Práctica 2: Tipos de datos en Haskell Laboratorio Análisis Lógico Práctica 2: Tipos de datos en Haskell Pedro A. Góngora Luna 1 1. Operadores La figura 1 muestra la lista de algunos de los operadores básicos definidos en el preludio. La lista

Más detalles

Tipos de datos y clases de tipos

Tipos de datos y clases de tipos Tipos de datos y clases de tipos Taller de Álgebra I Verano 2017 Tipos de datos Tipo de dato Un conjunto de valores a los que se les puede aplicar un conjunto de funciones. Ejemplos 1 Integer = (Z, {+,,,

Más detalles

Tema 1.3. Un lenguaje mínimo y su procesador: Restricciones contextuales

Tema 1.3. Un lenguaje mínimo y su procesador: Restricciones contextuales Tema 1.3. Un lenguaje mínimo y su procesador: Restricciones contextuales Profesor Federico Peinado Elaboración del material José Luis Sia Federico Peinado Facultad de Informática Universidad Complutense

Más detalles

Mecanismo de Reducción

Mecanismo de Reducción Mecanismo de Reducción Taller de Álgebra I 1er Cuatrimestre 2017 Repaso: Qué vimos hasta ahora? Programar para qué? Implementar algoritmos que solucionen problemas. Pensamiento algorítmico Ver los problemas

Más detalles

Tema 1: Introducción a la programación funcional

Tema 1: Introducción a la programación funcional Tema 1: Introducción a la programación funcional Informática (2015 16) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla 2 /

Más detalles

Tema 1: Introducción a la programación funcional

Tema 1: Introducción a la programación funcional Programación declarativa (2009 10) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla 2 / 21 3 / 21 en Haskell En Haskell, una

Más detalles

Informática de 1 o de Matemáticas. Ejercicios de Introducción a Haskell. Ejercicio 1 Consideremos la siguiente definición:

Informática de 1 o de Matemáticas. Ejercicios de Introducción a Haskell. Ejercicio 1 Consideremos la siguiente definición: Ejercicios de Introducción a Haskell Informática de 1 o de Matemáticas Ejercicio 1 Consideremos la siguiente definición: doble x = x + x El valor de doble(doble 3) se puede calcular usando distintos métodos

Más detalles

Metodologías de Programación II Introducción

Metodologías de Programación II Introducción Metodologías de Programación II Introducción Dr. Alejandro Guerra-Hernández Departamento de Inteligencia Artificial Facultad de Física e Inteligencia Artificial aguerra@uv.mx http://www.uv.mx/aguerra Maestría

Más detalles

Procesadores de lenguaje Tema 5 Comprobación de tipos

Procesadores de lenguaje Tema 5 Comprobación de tipos Procesadores de lenguaje Tema 5 Comprobación de tipos Departamento de Ciencias de la Computación Universidad de Alcalá Resumen Sistemas de tipos. Expresiones de tipo. Equivalencia de tipos. Sobrecarga,

Más detalles

Guía 1: Funciones, precedencia y tipado

Guía 1: Funciones, precedencia y tipado Introducción a los Algoritmos - do. cuatrimestre 014 Guía 1: Funciones, precedencia y tipado Docentes: Walter Alini, Luciana Benotti El objetivo de los siguientes ejercicios es introducirnos en la programación

Más detalles

Introducción a la Programación Genérica

Introducción a la Programación Genérica Introducción a la Programación Genérica Alberto Pardo Instituto de Computación Facultad de Ingeniería Universidad de la República http://www.fing.edu.uy/inco/cursos/proggen Objetivo del curso Introducción

Más detalles

Problemas de Álgebra 2 o de Bachillerato

Problemas de Álgebra 2 o de Bachillerato Problemas de Álgebra 2 o de Bachillerato Problema 1 Calcular los productos de matrices A A, A B, B A y B B, siempre que sea posible, donde: 2 1 3 1 2 1. A = y B = 1 0 2 1 1 1 2 2. A = 1 1 0 2 y B = 3.

Más detalles

Guía 2: Funciones, listas, recursión e inducción

Guía 2: Funciones, listas, recursión e inducción Introducción a los Algoritmos - 1er cuatrimestre 2015 Guía 2: Funciones, listas, recursión e inducción El objetivo de los siguientes ejercicios es introducirnos en la programación funcional, es decir,

Más detalles

Tema 6. Definiciones de tipos

Tema 6. Definiciones de tipos Programación Declarativa Haskell Informática Sistemas Curso 2003-2004 Pepe Gallardo Universidad de Málaga Tema 6. Definiciones de tipos 6.1 Sinónimos de tipo 6.2 Definiciones de tipos de datos Tipos enumerados

Más detalles

Relación 1. Espacios vectoriales

Relación 1. Espacios vectoriales MATEMÁTICAS PARA LA EMPRESA Curso 2007/08 Relación 1. Espacios vectoriales 1. (a) En IR 2 se consideran las operaciones habituales: (x, y) + (x, y ) = (x + x, y + y ) λ(x, y) = (λx, λy) Demuestra que IR

Más detalles

Divisibilidad y congruencia

Divisibilidad y congruencia Divisibilidad y congruencia Taller de Álgebra I Verano 2017 Algoritmo de la división Teorema Dados a, d Z, d 0, existen únicos q, r Z tales que a = qd + r, 0 r < d. Idea de la demostración: (caso a 0,

Más detalles

Cálculo Lambda Lenguajes Aplicativos puros Un Lenguaje Aplicativo con referencias y asignación Lenguajes y Compiladores

Cálculo Lambda Lenguajes Aplicativos puros Un Lenguaje Aplicativo con referencias y asignación Lenguajes y Compiladores 2015 Estructura de la materia a grandes rasgos: Primera Parte: Lenguaje imperativo Segunda Parte: Lenguaje aplicativo puro, y lenguaje aplicativo con referencias y asignación Ejes de contenidos de la segunda

Más detalles

Tutorial Haskell David Julián Guzmán Cárdenas Cristian Alexanther Rojas Cárdenas Luis Ernesto Gil Castellanos

Tutorial Haskell David Julián Guzmán Cárdenas Cristian Alexanther Rojas Cárdenas Luis Ernesto Gil Castellanos Tutorial Haskell David Julián Guzmán Cárdenas Cristian Alexanther Rojas Cárdenas Luis Ernesto Gil Castellanos Agenda 1. 2. 3. 4. 5. 6. Introducción Aspectos básicos del lenguaje Tipos y clases de tipos

Más detalles

Grafos. 19 de diciembre de 2013

Grafos. 19 de diciembre de 2013 Grafos 19 de diciembre de 2013 Grafo Un grafo es un conjunto, no vacío, de objetos llamados vértices (o nodos) y una selección de pares de vértices, llamados aristas (edges en inglés) que pueden ser orientados

Más detalles

PROGRAMACIÓN LÓGICA. David Felipe Rico Hernandez Gabriel Esteban Bejarano Delgado

PROGRAMACIÓN LÓGICA. David Felipe Rico Hernandez Gabriel Esteban Bejarano Delgado PROGRAMACIÓN LÓGICA David Felipe Rico Hernandez Gabriel Esteban Bejarano Delgado Introducción Programación Lógica Conceptos clave Lenguajes de programación Ejemplos Ventajas y desventajas Aplicaciones

Más detalles

Lenguajes de Programación Programación funcional

Lenguajes de Programación Programación funcional Lenguajes de Programación Programación funcional Roberto Bonvallet Departamento de Informática Universidad Técnica Federico Santa María Concepto de función En el paradigma imperativo: Una función es una

Más detalles

TIPOS ABSTRACTOS DE DATOS EN HASKELL

TIPOS ABSTRACTOS DE DATOS EN HASKELL TIPOS ABSTRACTOS DE DATOS EN HASKELL ÍNDICE GENERAL 1. Introducción a Haskell 2. Tipos abstractos de datos en Haskell 3. TAD Grafo 4. TAD Montículos 5. Bibliografía INTRODUCCIÓN A HASKELL 1. Introducción

Más detalles

Tema 8: Funciones de orden superior

Tema 8: Funciones de orden superior Tema 8: Funciones de orden superior Programación declarativa (2009 10) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla Tema

Más detalles

Programación Funcional Haskell Clase 22

Programación Funcional Haskell Clase 22 Programación Funcional Haskell Clase 22 José Raymundo Marcial Romero rmarcial@fi.uaemex.mx BUAP c José Raymundo Marcial Romero. Clase Número 22 p.1/?? Temas de la clase Tipos Numéricos de Haskell Tipos

Más detalles

Tema 8: Funciones de orden superior

Tema 8: Funciones de orden superior Tema 8: Funciones de orden superior Programación declarativa (2010 11) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla 2 /

Más detalles

Laboratorio de Lenguajes de Programación Introducción al lenguaje ML

Laboratorio de Lenguajes de Programación Introducción al lenguaje ML Laboratorio de Lenguajes de Programación Introducción al lenguaje ML Pedro A. Góngora Luna 1 1. Tipos de datos básicos Para iniciar el intérprete utilizamos el comando sml en el shell de windows o unix:

Más detalles

UNIDAD IV Programación Funcional. Lic. Jesús Germán Andrés PAUTSCH - FCEQyN - UNaM

UNIDAD IV Programación Funcional. Lic. Jesús Germán Andrés PAUTSCH - FCEQyN - UNaM UNIDAD IV Programación Funcional Porqué? 2 Introducción Porque aprender programación funcional? - Recursión - Abstracción funcional - Funciones de primer orden Estos conceptos se han incorporado en la

Más detalles

Estructuras de Datos y Algoritmos: Boletín de Problemas del segundo parcial

Estructuras de Datos y Algoritmos: Boletín de Problemas del segundo parcial Estructuras de Datos y Algoritmos: Boletín de Problemas del segundo parcial (Facultad de Informática) Curso 00 0 Estructuras de Datos y Algoritmos (FI-UPV) Curso 00 0 Árboles. Si la acción P fuera escribir

Más detalles

El lenguaje C. 1. Identificadores, constantes y variables

El lenguaje C. 1. Identificadores, constantes y variables Principios de Programación El lenguaje C 1. Identificadores, constantes y variables 1.1. Conceptos de memoria Los nombres de variable como x, y, suma corresponden a localizaciones o posiciones en la memoria

Más detalles

Lambda cálculo no tipado

Lambda cálculo no tipado Capítulo 1 Lambda cálculo no tipado Vamos a revisar la definición y propiedades básicas del lambda cálculo puro o no tipado. A mediados de los 60s, Peter Landin observó que un lenguaje de programación

Más detalles

Tema 21: Algoritmos de exploración de grafos

Tema 21: Algoritmos de exploración de grafos Tema 21: Algoritmos de exploración de grafos Informática (2009 10) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla Tema 21:

Más detalles

Práctica 6. Extremos Condicionados

Práctica 6. Extremos Condicionados Práctica 6. Extremos Condicionados 6.1 Introducción El problema que nos planteamos podría enunciarse del modo siguiente: Sean A R n, f : A R una función de clase C 1 y M A. Consideremos la restricción

Más detalles

Tipos de datos en Haskell

Tipos de datos en Haskell Tipos de datos en Haskell Ejercicios 1. Tipos enumerados Cuando los distintos valores que debemos distinguir en un tipo son finitos, entonces podemos enumerar todos los valores distintos para el tipo.

Más detalles

Cálculo Lambda - primera parte. Paradigmas de Lenguajes de Programación. Primer cuatrimestre

Cálculo Lambda - primera parte. Paradigmas de Lenguajes de Programación. Primer cuatrimestre Cálculo Lambda - primera parte Paradigmas de Lenguajes de Programación Primer cuatrimestre - 2014 Para qué sirve el cálculo lambda? Provee un modelo de cómputo simple que permite representar todas las

Más detalles

Cálculo Lambda - primera parte. Paradigmas de Lenguajes de Programación. Segundo cuatrimestre

Cálculo Lambda - primera parte. Paradigmas de Lenguajes de Programación. Segundo cuatrimestre Cálculo Lambda - primera parte Paradigmas de Lenguajes de Programación Segundo cuatrimestre - 2010 Tipos y términos Las expresiones de tipos (o simplemente tipos) de C-λ b son σ ::= Bool σ τ Sea X un conjunto

Más detalles

Programación Funcional

Programación Funcional Programación Funcional 2 Tabla de Contenidos 0.1. Evolución y Conceptos básicos................... 4 0.2. Definición de funciones........................ 4 0.3. Sistema de Tipos...........................

Más detalles

Gramáticas de Atributos

Gramáticas de Atributos Teoría de Lenguajes Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires Etapas de un Compilador Analizador Léxico Analizador Sintáctico (Parser)... Lexer: Genera secuencia de tokens Reporta

Más detalles

Paradigmas de lenguajes de programación. Introducción a la programación imperativa. Lenguaje C. Programación imperativa

Paradigmas de lenguajes de programación. Introducción a la programación imperativa. Lenguaje C. Programación imperativa Paradigmas de lenguajes de programación Introducción a la programación imperativa Algoritmos y Estructuras de Datos I Paradigma: Definición del modo en el que se especifica el cómputo (que luego es implementado

Más detalles

Modelo de Cómputo. Programación concurrente

Modelo de Cómputo. Programación concurrente Programa concurrente Programa concurrente: conjunto finito de procesos (secuenciales). Un proceso secuencial está escrito con un conjunto finito de acciones atómicas. Ejecución: una secuencia de acciones

Más detalles

Pattern matching + Tipos enumerados

Pattern matching + Tipos enumerados Pattern matching + Tipos enumerados Taller de Álgebra I Verano 2017 Pattern matching Pattern matching El pattern matching es un mecanismo que nos permite asociar una definición de una función solo a ciertos

Más detalles

Programación Funcional Haskell Clase 19

Programación Funcional Haskell Clase 19 Programación Funcional Haskell Clase 19 José Raymundo Marcial Romero rmarcial@fi.uaemex.mx BUAP c José Raymundo Marcial Romero. Clase Número 19 p.1/23 Temas de la clase Lenguajes Funcionales Haskell y

Más detalles

Tipos paramétricos y recursivos

Tipos paramétricos y recursivos Tipos paramétricos y recursivos Taller de Álgebra I Verano 2017 Tipos paramétricos Tipos paramétricos Podemos hacer que los constructores de un tipo de datos reciban parámetros. A los tipos construidos

Más detalles

Isabelle como un lenguaje funcional

Isabelle como un lenguaje funcional Capítulo 1 Isabelle como un lenguaje funcional 1.1 Introducción Nota 1.1.1. Esta notas son una introducción a la demostración asistida utilizando el sistema Isabelle/HOL/Isar. La versión de Isabelle utilizada

Más detalles

TEMA 8 GEOMETRÍA ANALÍTICA - Módulo: Es la longitud del segmento AB, se representa así:

TEMA 8 GEOMETRÍA ANALÍTICA - Módulo: Es la longitud del segmento AB, se representa así: MATEMÁTICAS ACADÉMICAS 4º ESO TEMA 8 GEOMETRÍA ANALÍTICA - 1. MÓDULO, DIRECCIÓN Y SENTIDO DE UN VECTOR Módulo: Es la longitud del segmento AB, se representa así: Dirección: Es la dirección de la recta

Más detalles

Unidad II: Análisis semántico

Unidad II: Análisis semántico Unidad II: Análisis semántico Se compone de un conjunto de rutinas independientes, llamadas por los analizadores morfológico y sintáctico. El análisis semántico utiliza como entrada el árbol sintáctico

Más detalles

Árboles generales. Un árbol es una estructura no lineal acíclica utilizada para organizar información de forma eficiente. La definición es recursiva:

Árboles generales. Un árbol es una estructura no lineal acíclica utilizada para organizar información de forma eficiente. La definición es recursiva: Capítulo 9. Programación con Árboles 107 Árboles Árboles generales Un árbol es una estructura no lineal acíclica utilizada para organizar información de forma eficiente. La definición es recursiva: Un

Más detalles

Apellidos: Nombre: 2º Grupo: _D _ Día: 22-XI-2011 CURSO

Apellidos: Nombre: 2º Grupo: _D _ Día: 22-XI-2011 CURSO MATEMATICAS CC SS 1ª EVALUACIÓN Apellidos: Nombre: º Grupo: _D _ Día: -XI-011 CURSO 011-1 OPCIÓN A 0 3 (a) (1, puntos) Dadas las matrices M y N t 3 0, razone cuales de las siguientes operaciones tienen

Más detalles

Veamos un ejemplo: en KPress-Calc, una secuencia de objetos se representa mediante una expresión de la forma

Veamos un ejemplo: en KPress-Calc, una secuencia de objetos se representa mediante una expresión de la forma Kpress-Calc: Programación Avanzada. Expresiones y reglas Esencialmente hablando, el núcleo de KPress-Calc manipula expresiones 1 según una serie de reglas de transformación 2, a la que llamamos programa.

Más detalles

Práctica 1. Programación Funcional Introducción a Helium

Práctica 1. Programación Funcional Introducción a Helium Práctica 1. Programación Funcional Introducción a Helium Who? Lenguajes y Paradigmas de Programación Objetivo de la práctica Presentar las facilidades básicas del entorno de programación Helium Presentar

Más detalles

CAPÍTULO IV: 4.1 Introducción a la. Programación Funcional

CAPÍTULO IV: 4.1 Introducción a la. Programación Funcional CAPÍTULO IV: Programación Funcional 4.1 Introducción a la Programación Funcional 1 Programación Funcional Paradigma diferente a los imperativos, que se aleja de la máquina de von Neumann Basado en funciones

Más detalles

Tema 2. Fundamentos Teóricos de la. programación dinámica Teorema de Optimalidad de Mitten

Tema 2. Fundamentos Teóricos de la. programación dinámica Teorema de Optimalidad de Mitten Tema 2 Fundamentos Teóricos de la Programación Dinámica 2.1. Teorema de Optimalidad de Mitten El objetivo básico en la programación dinámica consiste en descomponer un problema de optimización en k variables

Más detalles

Práctica N o 1 - Programación Funcional

Práctica N o 1 - Programación Funcional Práctica N o 1 - Programación Funcional Para resolver esta práctica, recomendamos usar el Hugs 98, de distribución gratuita, que puede bajarse de http://www.haskell.org/hugs/. Ejercicio 1 Dado el siguiente

Más detalles

Programación Funcional Haskell Clase 21

Programación Funcional Haskell Clase 21 Programación Funcional Haskell Clase 21 José Raymundo Marcial Romero rmarcial@fi.uaemex.mx BUAP c José Raymundo Marcial Romero. Clase Número 21 p.1/12 Temas de la clase Clase Anterior En Haskell cada expresión

Más detalles

Divisibilidad y congruencia

Divisibilidad y congruencia de los ejercicios de la clase 8 Divisibilidad y congruencia Taller de Álgebra I Segundo cuatrimestre de 2016 Introducción A continuación les presentamos algunas soluciones para los ejercicios de la clase

Más detalles

Topological Sort y Componentes Fuertemente Conexas

Topological Sort y Componentes Fuertemente Conexas Topological Sort y Componentes Fuertemente Conexas Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires Algoritmos y Estructuras de Datos III (UBA) Topological Sort y SCC Algoritmos III

Más detalles

ANÁLISIS SINTÁCTICO PREDICTIVO NO RECURSIVO

ANÁLISIS SINTÁCTICO PREDICTIVO NO RECURSIVO 1 UNIVERSIDAD DE MAGALLANES FACULTAD DE INGENIERÍA DEPARTAMENTO DE COMPUTACIÓN ANÁLISIS SINTÁCTICO PREDICTIVO NO RECURSIVO Elaborado el Martes 12 de Octubre de 2004 I.- INTRODUCCIÓN Es posible realizar

Más detalles