Tipos en Haskell. Cecilia Manzino

Documentos relacionados
Tema II: Introducción al Lenguaje Funcional

Programación Funcional Haskell Clase 22

Introducción a Haskell. Cecilia Manzino

Algoritmos y programas. Algoritmos y Estructuras de Datos I

El sistema de clases de Haskell. Introducción

Tipos de datos algebraicos

Tema 3: Tipos y clases

Tema 3: Tipos y clases

Introducción a OCaml. October 19, 2015

Tema 3: Tipos y clases

Tema 3: Tipos y clases

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

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

Tema 9: Declaraciones de tipos y clases

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

Tema 9: Declaraciones de tipos y clases

Tema 6. Definiciones de tipos

Programación funcional

Tipos paramétricos y recursivos

Programación Funcional Haskell Clase 21

data Tree a = Tip Node a (Tree a) (Tree a) deriving Show

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

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

Funciones Segunda parte

Isabelle como un lenguaje funcional

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

Lenguajes funcionales: λ-cálculo

Tema 7. El sistema de clases

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

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

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)

Tema 3. Patrones y Definiciones de Funciones

Tema 2. Tipos predefinidos

Para entender la recursividad primero tenemos que entender la recursividad

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

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

Tema 4: Definición de funciones

Tema 4: Definición de funciones

Lógica y Programación

Tema 3. Patrones y Definiciones de Funciones

Introducción a la Programación Genérica

Tema 2: Introducción a Haskell

Programación Funcional

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

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

Informática Haskell Matemáticas Curso Pepe Gallardo Universidad de Málaga. Temario

Introducción a Haskell. El lenguaje Haskell

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

Práctica N o 1 - Programación Funcional

Tema 12: Analizadores sintácticos funcionales

Guía 1: Funciones, precedencia y tipado

Definiciones de tipo. Sinónimos de tipo

Tipos de datos y clases de tipos

Programación Funcional en Haskell

Introducción a la programación. Cecilia Manzino

Tema 11: Analizadores sintácticos funcionales

Tema 6: Funciones recursivas

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

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

El lenguaje C. 1. Identificadores, constantes y variables

Pattern matching + Tipos enumerados

Apunte Laboratorio ALPI - El lenguaje de programación Pascal

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

Programación Funcional Haskell Clase 19

Metodologías de Programación II Introducción a OCaml

Análisis semántico Tabla de símbolos, chequeo de tipos y representaciones internas

TP de Programación Funcional: Reversi

Funciones y subrutinas

Funciones: Pasos por Referencia Recursividad

Funciones II. Fundamentos de Programación Fundamentos de Programación I

abril de 2017 Desarrollo de aplicaciones en Java Tipos de datos primitivos Tipos de datos Elementos de aplicaciones simples

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

Modelado algebraico de tipos de datos recursivos

Introducción al lenguaje C

Tema 3. Tipos de datos simples

Tema 8: Funciones de orden superior

Tema 8: Funciones de orden superior

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

Programación con listas. El tipo lista

Guardas y Tipos de datos

Mecanismo de Reducción

ANÁLISIS SEMÁNTICO VERIFICACIÓN DE TIPOS

Introducción. Haskell

Tema 2: Desarrollo de Algoritmos. E.E. de Algorítmica

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Introducción a los Algoritmos Validez, Satisfactibilidad, Tipos y Funciones

Repaso Lenguaje C Área de Servicios Programación (Ing. Elect. y Prof. Tec.), Programación I (TUG y TUR) y Electrónica programable (TUE)

Paradigmas de Lenguajes de Programación Introducción al paradigma funcional

Manos a la obra: Recursión, división y listas

Trabajo Práctico 1 - Programación Funcional Fecha de entrega: Jueves 20 de abril, hasta las 21 hs.

EJERCICIOS DE LENGUAJES Y PARADIGMAS DE PROGRAMACIÓN (CUESTIONES DE EXAMEN) PROGRAMACIÓN FUNCIONAL

Compiladores: Análisis Semántico. Pontificia Universidad Javeriana Cali Ingenieria de Sistemas y Computación Prof. Gloria Inès Alvarez V.

Tipos de datos en Haskell

LENGUAJE FORTRAN. FUNCIONES Y SUBRUTINAS

Tipos y estructuras de datos en los lenguajes funcionales

PARADIGMAS DE LENGUAJES DE PROGRAMACIÓN. Programación Funcional. Pablo E. Fidel Martínez López

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

Transcripción:

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 (de forma rudimentaria) ayudar al programador a diseñar el programa (abstracción) optimizar código durante la compilación Es una buena práctica de programación escribir el tipo del programa antes de escribir el mismo.

En Haskell, todo valor tiene asociado un tipo. Es un lenguaje fuertemente tipado. Acepta solamente expresiones que tengan tipo. Tiene inferencia de tipo. Utiliza el algoritmo de inferencia de tipos de Hindley Milner, que asignada a una expresión el tipo más general. El chequeo de tipos es estático, es decir, los tipos son chequeados en tiempo de compilación.

Ya vimos: Tipos primitivos: Int, Char, Bool, Float Tuplas: (Int,Char) Tipo de las listas: [Int] Tipo de las funciones: Int Int Tipos polimórficos: a a Enumeraciones, con el constructor data. data Respuesta = Si No Nose donde Respuesta es un nuevo tipo con valores Si, No y Nose.

Declaraciones data Pueden tener parámetros de tipo: data Maybe a = Nothing Just a headt :: [a] Maybe a headt [] = Nothing headt (x:_) = x Pueden ser recursivas: data Nat = Zero Suc Nat suma :: Nat Nat Nat suma Zero n = n suma (Suc n) m = Suc (suma n m)

Declaraciones data Zero, Suc, Nothing y Just se denominan constructores. Los nombres de los constructores deben comenzar con letra mayúscula. Los constructores son funciones: Zero :: Nat Suc :: Nat Nat Nothing :: Maybe a Just :: a Maybe a Ejercicio: Definir un tipo para listas con elementos de cualquier tipo utilizando data.

Currificación Qué diferencias hay entre las siguientes funciones? minimo :: (Int, Int) Int minimo (x,y) = if x y then x else y minimoc :: Int Int Int minimoc x y = if x y then x else y La función minimoc toma un entero y devuelve una función que dado un entero devuelve un entero. Diremos que esta función está currificada.

Currificación Ventajas: Se reduce el número de paréntesis en una expresión. Las funciones currificadas pueden ser aplicadas a un sólo argumento, obteniendose así otra función que puede ser útil. Ejemplos: mintres :: Int Int mintres x = minimo 3 x sumacinco :: Nat Nat sumacinco x = suma 5 x

Aplicación de funciones Para que la currificación tenga sentido necesitamos que la aplicación de función asocie a izquierda. minimo 3 x es lo mismo que (minimo 3) x suma 5 x es lo mismo que (suma 5) x Por lo tanto debe asociar a derecha. Int Int Int es igual a Int (Int Int)

Funciones de alto orden Decimos que una función es de alto orden si: Toma como parámetro una función. Ejemplos: map :: (a b) [a] [b] filter :: (a Bool) [a] [a] Cuáles son los tipos de las funciones que toman como parámetro? Devuelve como resultado una función. Ejemplos: suma :: Nat Nat Nat minimoc :: Int Int Int Cuáles son los tipos de las funciones que devuelven?

La función filter Captura un esquema de recursión. filter :: (a Bool) [a] [a] filer p [] = [] filter p (x:xs) p x = x : filter p xs otherwise = filter p xs

La función filter positivos :: [Int] [Int] positivos [] = [] positivos (x:xs) x 0 = x : positivos xs otherwise = positivos xs pares :: [Int] [Int] pares [] = [] pares (x:xs) even x = x : pares xs otherwise = pares xs

En términos de filter positivos :: [Int] [Int] positivos xs = filter ( 0) xs pares :: [Int] [Int] pares xs = filter even xs

La función map Aplica una función dada a todos los elementos de una lista dada. map :: (a b) [a] [b] map f [] = [] map f (x:xs) = f x : map f xs Ejemplos: sumauno :: [Int] [Int] sumauno = map (+1) toint :: [Char] [Int] toint = map ord