Programación funcional
|
|
- Gustavo Ávila Zúñiga
- hace 7 años
- Vistas:
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 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 detallesTema 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 detallesAlgoritmos 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 detallesProgramació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 detallesParadigma 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 detallesTipos 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 detallesn! = 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 detallesParadigma 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 detallesLenguajes 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 detallesGuí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 detallesGuardas 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 detallesInferencia 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 detallesEl 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 detallesTema 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 detallesTema 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 detallesTema 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 detallesTema 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 detallesIntroducció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 detallesTema 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 detallesTema 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 detallesInformá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 detallesTema 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 detallesIntroducció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 detallesTipos 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 detallesGuí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 detallesFunciones 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 detallesTema 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 detallesAná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 detallesTema 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 detallesIntroducció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 detallesTema 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 detallesTema 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 detallesDefiniciones 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 detallesTema 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 detallesPara 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 detalles1.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 detallesTema 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 detallesListas 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 detallesMatemá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 detallesI 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 detallesGUÍ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 detallesIntroducció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 detallesTema 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 detallesLaboratorio 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 detallesTipos 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 detallesTema 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 detallesMecanismo 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 detallesTema 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 detallesTema 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 detallesInformá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 detallesMetodologí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 detallesProcesadores 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 detallesGuí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 detallesIntroducció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 detallesProblemas 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 detallesGuí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 detallesTema 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 detallesRelació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 detallesDivisibilidad 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 detallesCá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 detallesTutorial 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 detallesGrafos. 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 detallesPROGRAMACIÓ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 detallesLenguajes 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 detallesTIPOS 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 detallesTema 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 detallesProgramació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 detallesTema 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 detallesLaboratorio 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 detallesUNIDAD 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 detallesEstructuras 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 detallesEl 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 detallesLambda 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 detallesTema 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 detallesPrá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 detallesTipos 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 detallesCá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 detallesCá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 detallesProgramació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 detallesGramá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 detallesParadigmas 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 detallesModelo 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 detallesPattern 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 detallesProgramació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 detallesTipos 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 detallesIsabelle 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 detallesTEMA 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 detallesUnidad 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:
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 detallesApellidos: 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 detallesVeamos 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 detallesPrá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 detallesCAPÍ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 detallesTema 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 detallesPrá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 detallesProgramació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 detallesDivisibilidad 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 detallesTopological 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 detallesANÁ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