SlideShare une entreprise Scribd logo
1  sur  38
Télécharger pour lire hors ligne
Tema 3: Tipos y clases
          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
IM Tema 3: Tipos y clases




Tema 3: Tipos y clases
 1. Conceptos básicos sobre tipos
 2. Tipos básicos
 3. Tipos compuestos
       Tipos listas
       Tipos tuplas
       Tipos funciones
 4. Parcialización
 5. Polimorfismo y sobrecarga
       Tipos polimórficos
       Tipos sobrecargados
 6. Clases básicas

                                    2 / 38
IM Tema 3: Tipos y clases
  Conceptos básicos sobre tipos




Tema 3: Tipos y clases

 1. Conceptos básicos sobre tipos

 2. Tipos básicos

 3. Tipos compuestos

 4. Parcialización

 5. Polimorfismo y sobrecarga

 6. Clases básicas


                                    3 / 38
IM Tema 3: Tipos y clases
  Conceptos básicos sobre tipos




¿Qué es un tipo?
         Un tipo es una colección de valores relacionados.
         Un ejemplo de tipos es el de los valores booleanos: Bool
         El tipo Bool tiene dos valores True (verdadero) y False (falso).
         v :: T representa que v es un valor del tipo T y se dice que “v
         tiene tipo T”.
         Cálculo de tipo con :type
          Prelude> :type True
          True :: Bool
          Prelude> :type False
          False :: Bool
         El tipo Bool -> Bool está formado por todas las funciones cuyo
         argumento y valor son booleanos.
         Ejemplo de tipo Bool -> Bool
          Prelude> :type not
          not :: Bool -> Bool                                               4 / 38
IM Tema 3: Tipos y clases
  Conceptos básicos sobre tipos




Inferencia de tipos
         Regla de inferencia de tipos
                f :: A → B e :: A
                      f e :: B
         Tipos de expresiones:
         Prelude> :type not True
         not True :: Bool
         Prelude> :type not False
         not False :: Bool
         Prelude> :type not (not False)
         not (not False) :: Bool
         Error de tipo:
         Prelude> :type not 3
         Error: No instance for (Num Bool)
         Prelude> :type 1 + False
         Error: No instance for (Num Bool)   5 / 38
IM Tema 3: Tipos y clases
  Conceptos básicos sobre tipos




Ventajas de los tipos
         Los lenguajes en los que la inferencia de tipo precede a la
         evaluación se denominan de tipos seguros.
         Haskell es un lenguaje de tipos seguros.
         En los lenguajes de tipos seguros no ocurren errores de tipos
         durante la evaluación.
         La inferencia de tipos no elimina todos los errores durante la
         evaluación. Por ejemplo,
          Prelude> :type 1 `div` 0
          1 `div` 0 :: (Integral t) => t
          Prelude> 1 `div` 0
          *** Exception: divide by zero



                                                                          6 / 38
IM Tema 3: Tipos y clases
  Tipos básicos




Tema 3: Tipos y clases

 1. Conceptos básicos sobre tipos

 2. Tipos básicos

 3. Tipos compuestos

 4. Parcialización

 5. Polimorfismo y sobrecarga

 6. Clases básicas


                                    7 / 38
IM Tema 3: Tipos y clases
  Tipos básicos




Tipos básicos
         Bool (Valores lógicos):
                  Sus valores son True y False.
         Char (Caracteres):
                  Ejemplos: ’a’, ’B’, ’3’, ’+’
         String (Cadena de caracteres):
                  Ejemplos: "abc", "1 + 2 = 3"
         Int (Enteros de precisión fija):
                  Enteros entre −231 y 231 − 1.
                  Ejemplos: 123, -12
         Integer (Enteros de precisión arbitraria):
                  Ejemplos: 1267650600228229401496703205376.
         Float (Reales de precisión arbitraria):
                  Ejemplos: 1.2, -23.45, 45e-7
         Double (Reales de precisión doble):
                  Ejemplos: 1.2, -23.45, 45e-7
                                                               8 / 38
IM Tema 3: Tipos y clases
  Tipos compuestos




Tema 3: Tipos y clases

 1. Conceptos básicos sobre tipos

 2. Tipos básicos

 3. Tipos compuestos
       Tipos listas
       Tipos tuplas
       Tipos funciones

 4. Parcialización

 5. Polimorfismo y sobrecarga

                                    9 / 38
IM Tema 3: Tipos y clases
  Tipos compuestos
     Tipos listas



Tema 3: Tipos y clases

 1. Conceptos básicos sobre tipos

 2. Tipos básicos

 3. Tipos compuestos
       Tipos listas
       Tipos tuplas
       Tipos funciones

 4. Parcialización

 5. Polimorfismo y sobrecarga

                                    10 / 38
IM Tema 3: Tipos y clases
  Tipos compuestos
     Tipos listas



Tipos listas
         Una lista es una sucesión de elementos del mismo tipo.
         [T] es el tipo de las listas de elementos de tipo T.
         Ejemplos de listas:
          [False, True] :: [Bool]
          ['a','b','d'] :: [Char]
          ["uno","tres"] :: [String]
         Longitudes:
                    La longitud de una lista es el número de elementos.
                    La lista de longitud 0, [], es la lista vacía.
                    Las listas de longitud 1 se llaman listas unitarias.
         Comentarios:
                    El tipo de una lista no informa sobre su longitud:
                     ['a','b'] :: [Char]
                     ['a','b','c'] :: [Char]
                    El tipo de los elementos de una lista puede ser cualquiera:
                     [['a','b'],['c']] :: [[Char]]                                11 / 38
IM Tema 3: Tipos y clases
  Tipos compuestos
     Tipos tuplas



Tema 3: Tipos y clases

 1. Conceptos básicos sobre tipos

 2. Tipos básicos

 3. Tipos compuestos
       Tipos listas
       Tipos tuplas
       Tipos funciones

 4. Parcialización

 5. Polimorfismo y sobrecarga

                                    12 / 38
IM Tema 3: Tipos y clases
  Tipos compuestos
     Tipos tuplas



Tipos tuplas
         Una tupla es una sucesión de elementos.
         (T1 , T2 , . . . , Tn ) es el tipo de las n–tuplas cuya componente
         i–ésima es de tipo Ti .
         Ejemplos de tuplas:
          (False,True)                 :: (Bool,Bool)
          (False,'a',True) :: (Bool,Char,Bool)
         Aridades:
                    La aridad de una tupla es el número de componentes.
                    La tupla de aridad 0, (), es la tupla vacía.
                    No están permitidas las tuplas de longitud 1.
         Comentarios:
                    El tipo de una tupla informa sobre su longitud:
                     ('a','b')     :: (Char,Char)
                     ('a','b','c') :: (Char,Char,Char)
                    El tipo de los elementos de una tupla puede ser cualquiera:
                     (('a','b'),['c','d']) :: ((Char,Char),[Char])                13 / 38
IM Tema 3: Tipos y clases
  Tipos compuestos
     Tipos funciones



Tema 3: Tipos y clases

 1. Conceptos básicos sobre tipos

 2. Tipos básicos

 3. Tipos compuestos
       Tipos listas
       Tipos tuplas
       Tipos funciones

 4. Parcialización

 5. Polimorfismo y sobrecarga

                                    14 / 38
IM Tema 3: Tipos y clases
  Tipos compuestos
     Tipos funciones



Tipos funciones
         Una función es una aplicación de valores de un tipo en valores de
         otro tipo.
         T1 → T2 es el tipo de las funciones que aplica valores del tipo T1
         en valores del tipo T2 .
         Ejemplos de funciones:
          not      :: Bool -> Bool
          isDigit :: Char -> Bool




                                                                              15 / 38
IM Tema 3: Tipos y clases
  Tipos compuestos
     Tipos funciones



Funciones con múltiples argumentos o valores
         Ejemplo de función con múltiples argumentos:
         suma (x,y) es la suma de x e y. Por ejemplo, suma (2,3) es 5.

         suma :: (Int,Int) -> Int
         suma (x,y) = x+y
         Ejemplo de función con múltiples valores:
         deCeroA 5 es la lista de los números desde 0 hasta n. Por
         ejemplo, deCeroA n es [0,1,2,3,4,5].

         deCeroA :: Int -> [Int]
         deCeroA n = [0..n]
         Notas:
            1. En las definiciones se ha escrito la signatura de las funciones.
            2. No es obligatorio escribir la signatura de las funciones.
            3. Es conveniente escribir las signatura.
                                                                                 16 / 38
IM Tema 3: Tipos y clases
  Parcialización




Tema 3: Tipos y clases

 1. Conceptos básicos sobre tipos

 2. Tipos básicos

 3. Tipos compuestos

 4. Parcialización

 5. Polimorfismo y sobrecarga

 6. Clases básicas


                                    17 / 38
IM Tema 3: Tipos y clases
  Parcialización




Parcialización
         Mecanismo de parcialización (currying en inglés): Las funciones
         de más de un argumento pueden interpretarse como funciones
         que toman un argumento y devuelven otra función con un
         argumento menos.
         Ejemplo de parcialización:

         suma' :: Int -> (Int -> Int)
         suma' x y = x+y
         suma’ toma un entero x y devuelve la función suma’ x que
         toma un entero y y devuelve la suma de x e y. Por ejemplo,
          *Main> :type suma' 2
          suma' 2 :: Int -> Int
          *Main> :type suma' 2 3
          suma' 2 3 :: Int
                                                                           18 / 38
IM Tema 3: Tipos y clases
  Parcialización




Parcialización con tres argumentos
         Ejemplo de parcialización con tres argumentos:

         mult :: Int -> (Int -> (Int -> Int))
         mult x y z = x*y*z
         mult toma un entero x y devuelve la función mult x que toma
         un entero y y devuelve la función mult x y que toma un entero
         z y devuelve x*y*z. Por ejemplo,
          *Main> :type mult 2
          mult 2 :: Int -> (Int -> Int)
          *Main> :type mult 2 3
          mult 2 3 :: Int -> Int
          *Main> :type mult 2 3 7
          mult 2 3 7 :: Int
                                                                         19 / 38
IM Tema 3: Tipos y clases
  Parcialización




Aplicación parcial
         Las funciones que toman sus argumentos de uno en uno se
         llaman currificadas (curried en inglés).
         Las funciones suma’ y mult son currificadas.
         Las funciones currificadas pueden aplicarse parcialmente. Por
         ejemplo,
          *Main> (suma' 2) 3
          5
         Pueden definirse funciones usando aplicaciones parciales. Por
         ejemplo,

         suc :: Int -> Int
         suc = suma' 1
         suc x es el sucesor de x. Por ejemplo, suc 2 es 3.
                                                                        20 / 38
IM Tema 3: Tipos y clases
  Parcialización




Convenios para reducir paréntesis
         Convenio 1: Las flechas en los tipos se asocia por la derecha. Por
         ejemplo,
                Int -> Int -> Int -> Int
         representa a
                Int -> (Int -> (Int -> Int))
         Convenio 2: Las aplicaciones de funciones se asocia por la
         izquierda. Por ejemplo,
                mult x y z
         representa a
                ((mult x) y) z
         Nota: Todas las funciones con múltiples argumentos se definen
         en forma currificada, salvo que explícitamente se diga que los
         argumentos tienen que ser tuplas.

                                                                             21 / 38
IM Tema 3: Tipos y clases
  Polimorfismo y sobrecarga




Tema 3: Tipos y clases

 1. Conceptos básicos sobre tipos

 2. Tipos básicos

 3. Tipos compuestos

 4. Parcialización

 5. Polimorfismo y sobrecarga
       Tipos polimórficos
       Tipos sobrecargados

 6. Clases básicas
                                    22 / 38
IM Tema 3: Tipos y clases
  Polimorfismo y sobrecarga
     Tipos polimórficos



Tema 3: Tipos y clases

 1. Conceptos básicos sobre tipos

 2. Tipos básicos

 3. Tipos compuestos

 4. Parcialización

 5. Polimorfismo y sobrecarga
       Tipos polimórficos
       Tipos sobrecargados

 6. Clases básicas
                                    23 / 38
IM Tema 3: Tipos y clases
  Polimorfismo y sobrecarga
     Tipos polimórficos



Tipos polimórficos
         Un tipo es polimórfico (“tiene muchas formas”) si contiene una
         variable de tipo.
         Una función es polimórfica si su tipo es polimórfico.
         La función length es polimófica:
                 Comprobación:
                   Prelude> :type length
                   length :: [a] -> Int
                 Significa que que para cualquier tipo a, length toma una lista de
                 elementos de tipo a y devuelve un entero.
                 a es una variable de tipos.
                 Las variables de tipos tienen que empezar por minúscula.
                 Ejemplos:
                   length [1, 4, 7, 1]                                   4
                   length ["Lunes", "Martes", "Jueves"]                  3
                   length [reverse, tail]                                2
                                                                                    24 / 38
IM Tema 3: Tipos y clases
  Polimorfismo y sobrecarga
     Tipos polimórficos



Ejemplos de funciones polimórficas
         fst :: (a, b) -> a
          fst (1,'x')           1
          fst (True,"Hoy")      True
         head :: [a] -> a
          head [2,1,4]        2
          head ['b','c']      'b'
         take :: Int -> [a] -> [a]
          take 3 [3,5,7,9,4]            [3,5,7]
          take 2 ['l','o','l','a']      "lo"
          take 2 "lola"                 "lo"
         zip :: [a] -> [b] -> [(a, b)]
          zip [3,5] "lo"      [(3,'l'),(5,'o')]
         id :: a -> a
          id 3        3
          id 'x'      'x'                         25 / 38
IM Tema 3: Tipos y clases
  Polimorfismo y sobrecarga
     Tipos sobrecargados



Tema 3: Tipos y clases

 1. Conceptos básicos sobre tipos

 2. Tipos básicos

 3. Tipos compuestos

 4. Parcialización

 5. Polimorfismo y sobrecarga
       Tipos polimórficos
       Tipos sobrecargados

 6. Clases básicas
                                    26 / 38
IM Tema 3: Tipos y clases
  Polimorfismo y sobrecarga
     Tipos sobrecargados



Tipos sobrecargados
         Un tipo está sobrecargado si contiene una restricción de clases.
         Una función está sobregargada si su tipo está sobrecargado.
         La función sum está sobrecargada:
                 Comprobación:
                   Prelude> :type sum
                   sum :: (Num a) => [a] -> a
                 Significa que que para cualquier tipo numérico a, sum toma una
                 lista de elementos de tipo a y devuelve un valor de tipo a.
                 Num a es una restricción de clases.
                 Las restricciones de clases son expresiones de la forma C a, donde
                 C es el nombre de una clase y a es una variable de tipo.
                 Ejemplos:
                   sum [2, 3, 5]                       10
                   sum [2.1, 3.23, 5.345]              10.675
                                                                                      27 / 38
IM Tema 3: Tipos y clases
  Polimorfismo y sobrecarga
     Tipos sobrecargados



Ejemplos de tipos sobrecargados
         Ejemplos de funciones sobrecargadas:
                 (-)         ::   (Num   a)   =>   a   ->   a -> a
                 (*)         ::   (Num   a)   =>   a   ->   a -> a
                 negate      ::   (Num   a)   =>   a   ->   a
                 abs         ::   (Num   a)   =>   a   ->   a
                 signum      ::   (Num   a)   =>   a   ->   a
         Ejemplos de números sobrecargados:
                 5   :: (Num t) => t
                 5.2 :: (Fractional t) => t




                                                                     28 / 38
IM Tema 3: Tipos y clases
  Clases básicas




Tema 3: Tipos y clases

 1. Conceptos básicos sobre tipos

 2. Tipos básicos

 3. Tipos compuestos

 4. Parcialización

 5. Polimorfismo y sobrecarga

 6. Clases básicas


                                    29 / 38
IM Tema 3: Tipos y clases
  Clases básicas




Clases básicas
         Una clase es una colección de tipos junto con ciertas operaciones
         sobrecargadas llamadas métodos.
         Clases básicas:
                 Eq             tipos   comparables por igualdad
                 Ord            tipos   ordenados
                 Show           tipos   mostrables
                 Read           tipos   legibles
                 Num            tipos   numéricos
                 Integral       tipos   enteros
                 Fractional     tipos   fraccionarios




                                                                             30 / 38
IM Tema 3: Tipos y clases
  Clases básicas




La clase Eq (tipos comparables por igualdad)
         Eq contiene los tipos cuyos valores con comparables por igualdad.
         Métodos:
          (==) :: a -> a -> Bool
          (/=) :: a -> a -> Bool
         Instancias:
                   Bool, Char, String, Int, Integer, Float y Double.
                   tipos compuestos: listas y tuplas.
         Ejemplos:
          False == True                     False
          False /= True                     True
          'a' == 'b'                        False
          "aei" == "aei"                    True
          [2,3] == [2,3,2]                  False
          ('a',5) == ('a',5)                True
                                                                             31 / 38
IM Tema 3: Tipos y clases
  Clases básicas




La clase Ord (tipos ordenados)
         Ord es la subclase de Eq de tipos cuyos valores están ordenados.
         Métodos:
          (<), (<=), (>), (>=) :: a -> a -> Bool
          min, max                 :: a -> a -> a
         Instancias:
                   Bool, Char, String, Int, Integer, Float y Double.
                   tipos compuestos: listas y tuplas.
         Ejemplos:
          False < True                            True
          min 'a' 'b'                             'a'
          "elegante" < "elefante"                 False
          [1,2,3] < [1,2]                         False
          ('a',2) < ('a',1)                       False
          ('a',2) < ('b',1)                       True
                                                                            32 / 38
IM Tema 3: Tipos y clases
  Clases básicas




La clase Show (tipos mostrables)
         Show contiene los tipos cuyos valores se pueden convertir en
         cadenas de caracteres.
         Método:
          show :: a -> String
         Instancias:
                   Bool, Char, String, Int, Integer, Float y Double.
                   tipos compuestos: listas y tuplas.
         Ejemplos:
          show False                    "False"
          show 'a'                      "'a'"
          show 123                      "123"
          show [1,2,3]                  "[1,2,3]"
          show ('a',True)               "('a',True)"
                                                                        33 / 38
IM Tema 3: Tipos y clases
  Clases básicas




La clase Read (tipos legibles)
         Read contiene los tipos cuyos valores se pueden obtener a partir
         de cadenas de caracteres.
         Método:
          read :: String -> a
         Instancias:
                   Bool, Char, String, Int, Integer, Float y Double.
                   tipos compuestos: listas y tuplas.
         Ejemplos:
          read "False" :: Bool                                   False
          read "'a'" :: Char                                     'a'
          read "123" :: Int                                      123
          read "[1,2,3]" :: [Int]                                [1,2,3]
          read "('a',True)" :: (Char,Bool)                       ('a',True)
                                                                              34 / 38
IM Tema 3: Tipos y clases
  Clases básicas




La clase Num (tipos numéricos)
         Num es la subclase de Eq y Ord de tipos cuyos valores son
         números
         Métodos:
          (+), (*), (-)       :: a -> a -> a
          negate, abs, signum :: a -> a
         Instancias: Int, Integer, Float y Double.
         Ejemplos:
          2+3                 5
          2.3+4.2             6.5
          negate 2.7          -2.7
          abs (-5)            5
          signum (-5)         -1

                                                                     35 / 38
IM Tema 3: Tipos y clases
  Clases básicas




La clase Integral (tipos enteros)
         Integral es la subclase de Num cuyo tipos tienen valores enteros.
         Métodos:
          div :: a -> a -> a
          mod :: a -> a -> a
         Instancias: Int e Integer.
         Ejemplos:
          11 `div` 4         2
          11 `mod` 4         3




                                                                             36 / 38
IM Tema 3: Tipos y clases
  Clases básicas




La clase Fractional (tipos fraccionarios)
         Fractional es la subclase de Num cuyo tipos tienen valores no
         son enteros.
         Métodos:
          (/) :: a -> a -> a
          recip :: a -> a
         Instancias: Float y Double.
         Ejemplos:
          7.0 / 2.0         3.5
          recip 0.2         5.0




                                                                         37 / 38
IM Tema 3: Tipos y clases
  Bibliografía




Bibliografía
    1. R. Bird. Introducción a la programación funcional con Haskell.
       Prentice Hall, 2000.
                 Cap. 2: Tipos de datos simples.
    2. G. Hutton Programming in Haskell. Cambridge University Press,
       2007.
                 Cap. 3: Types and classes.
    3. B. O’Sullivan, D. Stewart y J. Goerzen Real World Haskell.
       O’Reilly, 2008.
                 Cap. 2: Types and Functions.
    4. B.C. Ruiz, F. Gutiérrez, P. Guerrero y J.E. Gallardo. Razonando
       con Haskell. Thompson, 2004.
                 Cap. 2: Introducción a Haskell.
                 Cap. 5: El sistema de clases de Haskell.
    5. S. Thompson. Haskell: The Craft of Functional Programming,
       Second Edition. Addison-Wesley, 1999.
                 Cap. 3: Basic types and definitions.
                                                                         38 / 38

Contenu connexe

Tendances

Automatas y compiladores clase2
Automatas y compiladores clase2Automatas y compiladores clase2
Automatas y compiladores clase2Germania Rodriguez
 
Etapas del Proceso de la Ingeniería del Software
Etapas del Proceso de la Ingeniería del SoftwareEtapas del Proceso de la Ingeniería del Software
Etapas del Proceso de la Ingeniería del SoftwareT.I.C
 
Normalización en Bases de datos
Normalización en Bases de datosNormalización en Bases de datos
Normalización en Bases de datoskamui002
 
Analisis y determinacion de requerimientos
Analisis y determinacion de requerimientosAnalisis y determinacion de requerimientos
Analisis y determinacion de requerimientosYesith Valencia
 
Patrón de diseño Modelo-Vista-Controlador (MVC)
Patrón de diseño Modelo-Vista-Controlador (MVC)Patrón de diseño Modelo-Vista-Controlador (MVC)
Patrón de diseño Modelo-Vista-Controlador (MVC)Jose R. Hilera
 
9 Curso de POO en java - variables, constantes y objetos
9 Curso de POO en java - variables, constantes y objetos9 Curso de POO en java - variables, constantes y objetos
9 Curso de POO en java - variables, constantes y objetosClara Patricia Avella Ibañez
 
Tipos abstractos de datos
Tipos abstractos de datosTipos abstractos de datos
Tipos abstractos de datosJose Armando
 
2. Casos de uso y diagramas de casos de uso
2. Casos de uso y diagramas de casos de uso2. Casos de uso y diagramas de casos de uso
2. Casos de uso y diagramas de casos de usoSaul Mamani
 
Normalización de Base de Datos
Normalización de Base de DatosNormalización de Base de Datos
Normalización de Base de DatosJorge Luis Chalén
 
Programación Orientada a Objetos - Resumen
Programación Orientada a Objetos - ResumenProgramación Orientada a Objetos - Resumen
Programación Orientada a Objetos - ResumenKarlytoz_36
 
Aplicaciones Distribuidas
Aplicaciones DistribuidasAplicaciones Distribuidas
Aplicaciones DistribuidasSorey García
 
Diagrama uml ing software i promecys
Diagrama uml ing software i promecysDiagrama uml ing software i promecys
Diagrama uml ing software i promecysLeonel Narvaez Ruiz
 
Modelos de Procesos de Software
Modelos de Procesos de SoftwareModelos de Procesos de Software
Modelos de Procesos de Softwaresebas montes
 

Tendances (20)

Web services y java
Web services y javaWeb services y java
Web services y java
 
Automatas y compiladores clase2
Automatas y compiladores clase2Automatas y compiladores clase2
Automatas y compiladores clase2
 
Etapas del Proceso de la Ingeniería del Software
Etapas del Proceso de la Ingeniería del SoftwareEtapas del Proceso de la Ingeniería del Software
Etapas del Proceso de la Ingeniería del Software
 
Array en java
Array en javaArray en java
Array en java
 
Normalización en Bases de datos
Normalización en Bases de datosNormalización en Bases de datos
Normalización en Bases de datos
 
Analisis y determinacion de requerimientos
Analisis y determinacion de requerimientosAnalisis y determinacion de requerimientos
Analisis y determinacion de requerimientos
 
Patrón de diseño Modelo-Vista-Controlador (MVC)
Patrón de diseño Modelo-Vista-Controlador (MVC)Patrón de diseño Modelo-Vista-Controlador (MVC)
Patrón de diseño Modelo-Vista-Controlador (MVC)
 
Srs plantilla ejercicio
Srs plantilla ejercicioSrs plantilla ejercicio
Srs plantilla ejercicio
 
9 Curso de POO en java - variables, constantes y objetos
9 Curso de POO en java - variables, constantes y objetos9 Curso de POO en java - variables, constantes y objetos
9 Curso de POO en java - variables, constantes y objetos
 
Tipos abstractos de datos
Tipos abstractos de datosTipos abstractos de datos
Tipos abstractos de datos
 
Tema3 d
Tema3 dTema3 d
Tema3 d
 
Sistema De Gestion De Notas De Post Grado
Sistema De Gestion De Notas De Post GradoSistema De Gestion De Notas De Post Grado
Sistema De Gestion De Notas De Post Grado
 
2. Casos de uso y diagramas de casos de uso
2. Casos de uso y diagramas de casos de uso2. Casos de uso y diagramas de casos de uso
2. Casos de uso y diagramas de casos de uso
 
Modelo relacional
Modelo relacionalModelo relacional
Modelo relacional
 
Normalización de Base de Datos
Normalización de Base de DatosNormalización de Base de Datos
Normalización de Base de Datos
 
Programación Orientada a Objetos - Resumen
Programación Orientada a Objetos - ResumenProgramación Orientada a Objetos - Resumen
Programación Orientada a Objetos - Resumen
 
Aplicaciones Distribuidas
Aplicaciones DistribuidasAplicaciones Distribuidas
Aplicaciones Distribuidas
 
Diagrama uml ing software i promecys
Diagrama uml ing software i promecysDiagrama uml ing software i promecys
Diagrama uml ing software i promecys
 
Modelos de Procesos de Software
Modelos de Procesos de SoftwareModelos de Procesos de Software
Modelos de Procesos de Software
 
Formato ieee830(srs lleno)
Formato ieee830(srs lleno)Formato ieee830(srs lleno)
Formato ieee830(srs lleno)
 

En vedette

Tema 7: Funciones de orden superior en Haskell
Tema 7: Funciones de orden superior en HaskellTema 7: Funciones de orden superior en Haskell
Tema 7: Funciones de orden superior en HaskellJosé A. Alonso
 
Programación funcional con haskell
Programación funcional con haskellProgramación funcional con haskell
Programación funcional con haskellSoftware Guru
 
Haskell aula2 tipos-e-classes
Haskell aula2 tipos-e-classesHaskell aula2 tipos-e-classes
Haskell aula2 tipos-e-classesCRISLANIO MACEDO
 
Tipos de memoria.
Tipos de memoria.Tipos de memoria.
Tipos de memoria.camilo199
 
¿Que es un icono y para que sirve
¿Que es un icono y para que sirve¿Que es un icono y para que sirve
¿Que es un icono y para que sirveJoshep Aguirre
 
Original Curry
Original CurryOriginal Curry
Original CurryPATISELE
 
Tipos De Datos Lisp
Tipos De Datos LispTipos De Datos Lisp
Tipos De Datos Lispyamies
 
Tema 11: Aplicaciones de la programación funcional con Haskell
Tema 11: Aplicaciones de la programación funcional con HaskellTema 11: Aplicaciones de la programación funcional con Haskell
Tema 11: Aplicaciones de la programación funcional con HaskellJosé A. Alonso
 
Tipos de lenguaje de programacion part 1
Tipos de lenguaje de programacion part 1Tipos de lenguaje de programacion part 1
Tipos de lenguaje de programacion part 1Ernes 28
 
2.1 elemento básicos del lenguaje de programación estructurado manipulación b...
2.1 elemento básicos del lenguaje de programación estructurado manipulación b...2.1 elemento básicos del lenguaje de programación estructurado manipulación b...
2.1 elemento básicos del lenguaje de programación estructurado manipulación b...carolina peña
 
Programación estructurada presentación
Programación estructurada presentaciónProgramación estructurada presentación
Programación estructurada presentaciónIvarra
 
Importancia De La ProgramacióN Estructurada
Importancia De La ProgramacióN EstructuradaImportancia De La ProgramacióN Estructurada
Importancia De La ProgramacióN EstructuradaMarvin Romero
 
Para que nos sirven las tics
Para que nos sirven las ticsPara que nos sirven las tics
Para que nos sirven las ticsGemaxDLR
 
TIPOS DE ESTRUCTURAS DE PROGRAMACION
TIPOS DE ESTRUCTURAS DE PROGRAMACIONTIPOS DE ESTRUCTURAS DE PROGRAMACION
TIPOS DE ESTRUCTURAS DE PROGRAMACIONjhohamn
 
Costeo y control de materiales, mano de obra y costos indirectos de fabricación
Costeo y control de materiales, mano de obra y costos indirectos de fabricaciónCosteo y control de materiales, mano de obra y costos indirectos de fabricación
Costeo y control de materiales, mano de obra y costos indirectos de fabricaciónCohorte Gerencia General
 
Programación Modular y Estructyrada
Programación Modular y EstructyradaProgramación Modular y Estructyrada
Programación Modular y Estructyradaguestefc95b
 

En vedette (20)

Tema 7: Funciones de orden superior en Haskell
Tema 7: Funciones de orden superior en HaskellTema 7: Funciones de orden superior en Haskell
Tema 7: Funciones de orden superior en Haskell
 
Programación funcional con haskell
Programación funcional con haskellProgramación funcional con haskell
Programación funcional con haskell
 
Haskell aula2 tipos-e-classes
Haskell aula2 tipos-e-classesHaskell aula2 tipos-e-classes
Haskell aula2 tipos-e-classes
 
Tipos de memoria.
Tipos de memoria.Tipos de memoria.
Tipos de memoria.
 
Yesod Framework
Yesod FrameworkYesod Framework
Yesod Framework
 
Bt haskell-1
Bt haskell-1Bt haskell-1
Bt haskell-1
 
¿Que es un icono y para que sirve
¿Que es un icono y para que sirve¿Que es un icono y para que sirve
¿Que es un icono y para que sirve
 
Original Curry
Original CurryOriginal Curry
Original Curry
 
KDE Connect
KDE ConnectKDE Connect
KDE Connect
 
Tipos De Datos Lisp
Tipos De Datos LispTipos De Datos Lisp
Tipos De Datos Lisp
 
Tema 11: Aplicaciones de la programación funcional con Haskell
Tema 11: Aplicaciones de la programación funcional con HaskellTema 11: Aplicaciones de la programación funcional con Haskell
Tema 11: Aplicaciones de la programación funcional con Haskell
 
Tipos de lenguaje de programacion part 1
Tipos de lenguaje de programacion part 1Tipos de lenguaje de programacion part 1
Tipos de lenguaje de programacion part 1
 
Tipos de programacion
Tipos de programacionTipos de programacion
Tipos de programacion
 
2.1 elemento básicos del lenguaje de programación estructurado manipulación b...
2.1 elemento básicos del lenguaje de programación estructurado manipulación b...2.1 elemento básicos del lenguaje de programación estructurado manipulación b...
2.1 elemento básicos del lenguaje de programación estructurado manipulación b...
 
Programación estructurada presentación
Programación estructurada presentaciónProgramación estructurada presentación
Programación estructurada presentación
 
Importancia De La ProgramacióN Estructurada
Importancia De La ProgramacióN EstructuradaImportancia De La ProgramacióN Estructurada
Importancia De La ProgramacióN Estructurada
 
Para que nos sirven las tics
Para que nos sirven las ticsPara que nos sirven las tics
Para que nos sirven las tics
 
TIPOS DE ESTRUCTURAS DE PROGRAMACION
TIPOS DE ESTRUCTURAS DE PROGRAMACIONTIPOS DE ESTRUCTURAS DE PROGRAMACION
TIPOS DE ESTRUCTURAS DE PROGRAMACION
 
Costeo y control de materiales, mano de obra y costos indirectos de fabricación
Costeo y control de materiales, mano de obra y costos indirectos de fabricaciónCosteo y control de materiales, mano de obra y costos indirectos de fabricación
Costeo y control de materiales, mano de obra y costos indirectos de fabricación
 
Programación Modular y Estructyrada
Programación Modular y EstructyradaProgramación Modular y Estructyrada
Programación Modular y Estructyrada
 

Similaire à Tema 3: Tipos y clases en Haskell

Similaire à Tema 3: Tipos y clases en Haskell (11)

2.4 tipo de dato entero
2.4 tipo de dato entero2.4 tipo de dato entero
2.4 tipo de dato entero
 
tipos
tipos tipos
tipos
 
Tipos de datos_en_c_(2)
Tipos de datos_en_c_(2)Tipos de datos_en_c_(2)
Tipos de datos_en_c_(2)
 
Modulo2a
Modulo2aModulo2a
Modulo2a
 
Tema 2 tipos de datos y expresiones en java por gio
Tema 2   tipos de datos y expresiones en java por gioTema 2   tipos de datos y expresiones en java por gio
Tema 2 tipos de datos y expresiones en java por gio
 
EXPO PYTHON.pptx
EXPO PYTHON.pptxEXPO PYTHON.pptx
EXPO PYTHON.pptx
 
Tipos de datos para C++
Tipos de datos para C++Tipos de datos para C++
Tipos de datos para C++
 
9. listas y for-in
9.  listas y for-in9.  listas y for-in
9. listas y for-in
 
8 tipos variables constantes
8 tipos variables constantes8 tipos variables constantes
8 tipos variables constantes
 
Tipos de datos
Tipos de datosTipos de datos
Tipos de datos
 
Fundamentos de java I
Fundamentos de java IFundamentos de java I
Fundamentos de java I
 

Plus de José A. Alonso

Tema 12: Analizadores sintácticos funcionales.
Tema 12: Analizadores sintácticos funcionales.Tema 12: Analizadores sintácticos funcionales.
Tema 12: Analizadores sintácticos funcionales.José A. Alonso
 
Tema 23: Técnicas de diseño descendente de algoritmos
Tema 23: Técnicas de diseño descendente de algoritmosTema 23: Técnicas de diseño descendente de algoritmos
Tema 23: Técnicas de diseño descendente de algoritmosJosé A. Alonso
 
I1M-T19: El TAD de los árboles de búsqueda
I1M-T19: El TAD de los árboles de búsquedaI1M-T19: El TAD de los árboles de búsqueda
I1M-T19: El TAD de los árboles de búsquedaJosé A. Alonso
 
I1M-T17: El TAD de los conjuntos
I1M-T17: El TAD de los conjuntosI1M-T17: El TAD de los conjuntos
I1M-T17: El TAD de los conjuntosJosé A. Alonso
 
Panorama de la demostración asistida por ordenador
Panorama de la demostración asistida por ordenadorPanorama de la demostración asistida por ordenador
Panorama de la demostración asistida por ordenadorJosé A. Alonso
 
LMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer ordenLMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer ordenJosé A. Alonso
 
LMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer ordenLMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer ordenJosé A. Alonso
 
LMF-T5b: Aplicaciones de la lógica proposicional
LMF-T5b: Aplicaciones de la lógica proposicionalLMF-T5b: Aplicaciones de la lógica proposicional
LMF-T5b: Aplicaciones de la lógica proposicionalJosé A. Alonso
 
LMF-T5: Resolución proposicional
LMF-T5: Resolución proposicionalLMF-T5: Resolución proposicional
LMF-T5: Resolución proposicionalJosé A. Alonso
 
LMF-T3: Tableros semánticos
LMF-T3: Tableros semánticosLMF-T3: Tableros semánticos
LMF-T3: Tableros semánticosJosé A. Alonso
 
LMF-T2: Deducción natural proposicional
LMF-T2: Deducción natural proposicionalLMF-T2: Deducción natural proposicional
LMF-T2: Deducción natural proposicionalJosé A. Alonso
 
I1M-T21: El TAD de los polinomios en Haskell
I1M-T21: El TAD de los polinomios en HaskellI1M-T21: El TAD de los polinomios en Haskell
I1M-T21: El TAD de los polinomios en HaskellJosé A. Alonso
 
LMF-T1: Sintaxis y semántica de la lógica proposicional
LMF-T1: Sintaxis y semántica de la lógica proposicionalLMF-T1: Sintaxis y semántica de la lógica proposicional
LMF-T1: Sintaxis y semántica de la lógica proposicionalJosé A. Alonso
 
LI-T12: LI2011-12: Introducción a la programación lógica con Prolog
LI-T12: LI2011-12: Introducción a la programación lógica con PrologLI-T12: LI2011-12: Introducción a la programación lógica con Prolog
LI-T12: LI2011-12: Introducción a la programación lógica con PrologJosé A. Alonso
 
LI-T6: Sintaxis y semántica de la lógica de primer orden
LI-T6: Sintaxis y semántica de la lógica de primer ordenLI-T6: Sintaxis y semántica de la lógica de primer orden
LI-T6: Sintaxis y semántica de la lógica de primer ordenJosé A. Alonso
 
LI-T5b: Algoritmos para SAT. Aplicaciones
LI-T5b: Algoritmos para SAT. AplicacionesLI-T5b: Algoritmos para SAT. Aplicaciones
LI-T5b: Algoritmos para SAT. AplicacionesJosé A. Alonso
 
Panorama del razonamiento automático
Panorama del razonamiento automáticoPanorama del razonamiento automático
Panorama del razonamiento automáticoJosé A. Alonso
 
LI -T5: Resolución proposicional
LI -T5: Resolución proposicionalLI -T5: Resolución proposicional
LI -T5: Resolución proposicionalJosé A. Alonso
 
I1M2010-T24: Programación dinámica en Haskell
I1M2010-T24: Programación dinámica en HaskellI1M2010-T24: Programación dinámica en Haskell
I1M2010-T24: Programación dinámica en HaskellJosé A. Alonso
 

Plus de José A. Alonso (20)

Tema 12: Analizadores sintácticos funcionales.
Tema 12: Analizadores sintácticos funcionales.Tema 12: Analizadores sintácticos funcionales.
Tema 12: Analizadores sintácticos funcionales.
 
Tema 23: Técnicas de diseño descendente de algoritmos
Tema 23: Técnicas de diseño descendente de algoritmosTema 23: Técnicas de diseño descendente de algoritmos
Tema 23: Técnicas de diseño descendente de algoritmos
 
I1M-T19: El TAD de los árboles de búsqueda
I1M-T19: El TAD de los árboles de búsquedaI1M-T19: El TAD de los árboles de búsqueda
I1M-T19: El TAD de los árboles de búsqueda
 
I1M-T17: El TAD de los conjuntos
I1M-T17: El TAD de los conjuntosI1M-T17: El TAD de los conjuntos
I1M-T17: El TAD de los conjuntos
 
Panorama de la demostración asistida por ordenador
Panorama de la demostración asistida por ordenadorPanorama de la demostración asistida por ordenador
Panorama de la demostración asistida por ordenador
 
LMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer ordenLMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer orden
 
LMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer ordenLMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer orden
 
LMF-T5b: Aplicaciones de la lógica proposicional
LMF-T5b: Aplicaciones de la lógica proposicionalLMF-T5b: Aplicaciones de la lógica proposicional
LMF-T5b: Aplicaciones de la lógica proposicional
 
LMF-T5: Resolución proposicional
LMF-T5: Resolución proposicionalLMF-T5: Resolución proposicional
LMF-T5: Resolución proposicional
 
LMF-T4: Formas normales
LMF-T4: Formas normalesLMF-T4: Formas normales
LMF-T4: Formas normales
 
LMF-T3: Tableros semánticos
LMF-T3: Tableros semánticosLMF-T3: Tableros semánticos
LMF-T3: Tableros semánticos
 
LMF-T2: Deducción natural proposicional
LMF-T2: Deducción natural proposicionalLMF-T2: Deducción natural proposicional
LMF-T2: Deducción natural proposicional
 
I1M-T21: El TAD de los polinomios en Haskell
I1M-T21: El TAD de los polinomios en HaskellI1M-T21: El TAD de los polinomios en Haskell
I1M-T21: El TAD de los polinomios en Haskell
 
LMF-T1: Sintaxis y semántica de la lógica proposicional
LMF-T1: Sintaxis y semántica de la lógica proposicionalLMF-T1: Sintaxis y semántica de la lógica proposicional
LMF-T1: Sintaxis y semántica de la lógica proposicional
 
LI-T12: LI2011-12: Introducción a la programación lógica con Prolog
LI-T12: LI2011-12: Introducción a la programación lógica con PrologLI-T12: LI2011-12: Introducción a la programación lógica con Prolog
LI-T12: LI2011-12: Introducción a la programación lógica con Prolog
 
LI-T6: Sintaxis y semántica de la lógica de primer orden
LI-T6: Sintaxis y semántica de la lógica de primer ordenLI-T6: Sintaxis y semántica de la lógica de primer orden
LI-T6: Sintaxis y semántica de la lógica de primer orden
 
LI-T5b: Algoritmos para SAT. Aplicaciones
LI-T5b: Algoritmos para SAT. AplicacionesLI-T5b: Algoritmos para SAT. Aplicaciones
LI-T5b: Algoritmos para SAT. Aplicaciones
 
Panorama del razonamiento automático
Panorama del razonamiento automáticoPanorama del razonamiento automático
Panorama del razonamiento automático
 
LI -T5: Resolución proposicional
LI -T5: Resolución proposicionalLI -T5: Resolución proposicional
LI -T5: Resolución proposicional
 
I1M2010-T24: Programación dinámica en Haskell
I1M2010-T24: Programación dinámica en HaskellI1M2010-T24: Programación dinámica en Haskell
I1M2010-T24: Programación dinámica en Haskell
 

Dernier

periodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicasperiodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicas123yudy
 
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...YobanaZevallosSantil1
 
MODELO DE INFORME DE INDAGACION CIENTIFICA .docx
MODELO DE INFORME DE INDAGACION CIENTIFICA .docxMODELO DE INFORME DE INDAGACION CIENTIFICA .docx
MODELO DE INFORME DE INDAGACION CIENTIFICA .docxRAMON EUSTAQUIO CARO BAYONA
 
Contextualización y aproximación al objeto de estudio de investigación cualit...
Contextualización y aproximación al objeto de estudio de investigación cualit...Contextualización y aproximación al objeto de estudio de investigación cualit...
Contextualización y aproximación al objeto de estudio de investigación cualit...Angélica Soledad Vega Ramírez
 
sesión de aprendizaje 4 E1 Exposición oral.pdf
sesión de aprendizaje 4 E1 Exposición oral.pdfsesión de aprendizaje 4 E1 Exposición oral.pdf
sesión de aprendizaje 4 E1 Exposición oral.pdfpatriciavsquezbecerr
 
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxPresentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxYeseniaRivera50
 
4º SOY LECTOR PART2- MD EDUCATIVO.p df PARTE
4º SOY LECTOR PART2- MD  EDUCATIVO.p df PARTE4º SOY LECTOR PART2- MD  EDUCATIVO.p df PARTE
4º SOY LECTOR PART2- MD EDUCATIVO.p df PARTESaraNolasco4
 
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024gharce
 
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMALVOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMALEDUCCUniversidadCatl
 
EDUCACION FISICA 1° PROGRAMACIÓN ANUAL 2023.docx
EDUCACION FISICA 1°  PROGRAMACIÓN ANUAL 2023.docxEDUCACION FISICA 1°  PROGRAMACIÓN ANUAL 2023.docx
EDUCACION FISICA 1° PROGRAMACIÓN ANUAL 2023.docxLuisAndersonPachasto
 
Fichas de Matemática DE SEGUNDO DE SECUNDARIA.pdf
Fichas de Matemática DE SEGUNDO DE SECUNDARIA.pdfFichas de Matemática DE SEGUNDO DE SECUNDARIA.pdf
Fichas de Matemática DE SEGUNDO DE SECUNDARIA.pdfssuser50d1252
 
Técnicas de grabado y estampación : procesos y materiales
Técnicas de grabado y estampación : procesos y materialesTécnicas de grabado y estampación : procesos y materiales
Técnicas de grabado y estampación : procesos y materialesRaquel Martín Contreras
 
3. Pedagogía de la Educación: Como objeto de la didáctica.ppsx
3. Pedagogía de la Educación: Como objeto de la didáctica.ppsx3. Pedagogía de la Educación: Como objeto de la didáctica.ppsx
3. Pedagogía de la Educación: Como objeto de la didáctica.ppsxJuanpm27
 
Día de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialDía de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialpatriciaines1993
 
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdfFisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdfcoloncopias5
 
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdfTema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdfDaniel Ángel Corral de la Mata, Ph.D.
 
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDUFICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDUgustavorojas179704
 

Dernier (20)

periodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicasperiodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicas
 
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...
 
MODELO DE INFORME DE INDAGACION CIENTIFICA .docx
MODELO DE INFORME DE INDAGACION CIENTIFICA .docxMODELO DE INFORME DE INDAGACION CIENTIFICA .docx
MODELO DE INFORME DE INDAGACION CIENTIFICA .docx
 
Contextualización y aproximación al objeto de estudio de investigación cualit...
Contextualización y aproximación al objeto de estudio de investigación cualit...Contextualización y aproximación al objeto de estudio de investigación cualit...
Contextualización y aproximación al objeto de estudio de investigación cualit...
 
sesión de aprendizaje 4 E1 Exposición oral.pdf
sesión de aprendizaje 4 E1 Exposición oral.pdfsesión de aprendizaje 4 E1 Exposición oral.pdf
sesión de aprendizaje 4 E1 Exposición oral.pdf
 
VISITA À PROTEÇÃO CIVIL _
VISITA À PROTEÇÃO CIVIL                  _VISITA À PROTEÇÃO CIVIL                  _
VISITA À PROTEÇÃO CIVIL _
 
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxPresentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
 
4º SOY LECTOR PART2- MD EDUCATIVO.p df PARTE
4º SOY LECTOR PART2- MD  EDUCATIVO.p df PARTE4º SOY LECTOR PART2- MD  EDUCATIVO.p df PARTE
4º SOY LECTOR PART2- MD EDUCATIVO.p df PARTE
 
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024
 
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMALVOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
 
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdfTema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
 
Aedes aegypti + Intro to Coquies EE.pptx
Aedes aegypti + Intro to Coquies EE.pptxAedes aegypti + Intro to Coquies EE.pptx
Aedes aegypti + Intro to Coquies EE.pptx
 
EDUCACION FISICA 1° PROGRAMACIÓN ANUAL 2023.docx
EDUCACION FISICA 1°  PROGRAMACIÓN ANUAL 2023.docxEDUCACION FISICA 1°  PROGRAMACIÓN ANUAL 2023.docx
EDUCACION FISICA 1° PROGRAMACIÓN ANUAL 2023.docx
 
Fichas de Matemática DE SEGUNDO DE SECUNDARIA.pdf
Fichas de Matemática DE SEGUNDO DE SECUNDARIA.pdfFichas de Matemática DE SEGUNDO DE SECUNDARIA.pdf
Fichas de Matemática DE SEGUNDO DE SECUNDARIA.pdf
 
Técnicas de grabado y estampación : procesos y materiales
Técnicas de grabado y estampación : procesos y materialesTécnicas de grabado y estampación : procesos y materiales
Técnicas de grabado y estampación : procesos y materiales
 
3. Pedagogía de la Educación: Como objeto de la didáctica.ppsx
3. Pedagogía de la Educación: Como objeto de la didáctica.ppsx3. Pedagogía de la Educación: Como objeto de la didáctica.ppsx
3. Pedagogía de la Educación: Como objeto de la didáctica.ppsx
 
Día de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialDía de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundial
 
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdfFisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdf
 
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdfTema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
 
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDUFICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDU
 

Tema 3: Tipos y clases en Haskell

  • 1. Tema 3: Tipos y clases 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. IM Tema 3: Tipos y clases Tema 3: Tipos y clases 1. Conceptos básicos sobre tipos 2. Tipos básicos 3. Tipos compuestos Tipos listas Tipos tuplas Tipos funciones 4. Parcialización 5. Polimorfismo y sobrecarga Tipos polimórficos Tipos sobrecargados 6. Clases básicas 2 / 38
  • 3. IM Tema 3: Tipos y clases Conceptos básicos sobre tipos Tema 3: Tipos y clases 1. Conceptos básicos sobre tipos 2. Tipos básicos 3. Tipos compuestos 4. Parcialización 5. Polimorfismo y sobrecarga 6. Clases básicas 3 / 38
  • 4. IM Tema 3: Tipos y clases Conceptos básicos sobre tipos ¿Qué es un tipo? Un tipo es una colección de valores relacionados. Un ejemplo de tipos es el de los valores booleanos: Bool El tipo Bool tiene dos valores True (verdadero) y False (falso). v :: T representa que v es un valor del tipo T y se dice que “v tiene tipo T”. Cálculo de tipo con :type Prelude> :type True True :: Bool Prelude> :type False False :: Bool El tipo Bool -> Bool está formado por todas las funciones cuyo argumento y valor son booleanos. Ejemplo de tipo Bool -> Bool Prelude> :type not not :: Bool -> Bool 4 / 38
  • 5. IM Tema 3: Tipos y clases Conceptos básicos sobre tipos Inferencia de tipos Regla de inferencia de tipos f :: A → B e :: A f e :: B Tipos de expresiones: Prelude> :type not True not True :: Bool Prelude> :type not False not False :: Bool Prelude> :type not (not False) not (not False) :: Bool Error de tipo: Prelude> :type not 3 Error: No instance for (Num Bool) Prelude> :type 1 + False Error: No instance for (Num Bool) 5 / 38
  • 6. IM Tema 3: Tipos y clases Conceptos básicos sobre tipos Ventajas de los tipos Los lenguajes en los que la inferencia de tipo precede a la evaluación se denominan de tipos seguros. Haskell es un lenguaje de tipos seguros. En los lenguajes de tipos seguros no ocurren errores de tipos durante la evaluación. La inferencia de tipos no elimina todos los errores durante la evaluación. Por ejemplo, Prelude> :type 1 `div` 0 1 `div` 0 :: (Integral t) => t Prelude> 1 `div` 0 *** Exception: divide by zero 6 / 38
  • 7. IM Tema 3: Tipos y clases Tipos básicos Tema 3: Tipos y clases 1. Conceptos básicos sobre tipos 2. Tipos básicos 3. Tipos compuestos 4. Parcialización 5. Polimorfismo y sobrecarga 6. Clases básicas 7 / 38
  • 8. IM Tema 3: Tipos y clases Tipos básicos Tipos básicos Bool (Valores lógicos): Sus valores son True y False. Char (Caracteres): Ejemplos: ’a’, ’B’, ’3’, ’+’ String (Cadena de caracteres): Ejemplos: "abc", "1 + 2 = 3" Int (Enteros de precisión fija): Enteros entre −231 y 231 − 1. Ejemplos: 123, -12 Integer (Enteros de precisión arbitraria): Ejemplos: 1267650600228229401496703205376. Float (Reales de precisión arbitraria): Ejemplos: 1.2, -23.45, 45e-7 Double (Reales de precisión doble): Ejemplos: 1.2, -23.45, 45e-7 8 / 38
  • 9. IM Tema 3: Tipos y clases Tipos compuestos Tema 3: Tipos y clases 1. Conceptos básicos sobre tipos 2. Tipos básicos 3. Tipos compuestos Tipos listas Tipos tuplas Tipos funciones 4. Parcialización 5. Polimorfismo y sobrecarga 9 / 38
  • 10. IM Tema 3: Tipos y clases Tipos compuestos Tipos listas Tema 3: Tipos y clases 1. Conceptos básicos sobre tipos 2. Tipos básicos 3. Tipos compuestos Tipos listas Tipos tuplas Tipos funciones 4. Parcialización 5. Polimorfismo y sobrecarga 10 / 38
  • 11. IM Tema 3: Tipos y clases Tipos compuestos Tipos listas Tipos listas Una lista es una sucesión de elementos del mismo tipo. [T] es el tipo de las listas de elementos de tipo T. Ejemplos de listas: [False, True] :: [Bool] ['a','b','d'] :: [Char] ["uno","tres"] :: [String] Longitudes: La longitud de una lista es el número de elementos. La lista de longitud 0, [], es la lista vacía. Las listas de longitud 1 se llaman listas unitarias. Comentarios: El tipo de una lista no informa sobre su longitud: ['a','b'] :: [Char] ['a','b','c'] :: [Char] El tipo de los elementos de una lista puede ser cualquiera: [['a','b'],['c']] :: [[Char]] 11 / 38
  • 12. IM Tema 3: Tipos y clases Tipos compuestos Tipos tuplas Tema 3: Tipos y clases 1. Conceptos básicos sobre tipos 2. Tipos básicos 3. Tipos compuestos Tipos listas Tipos tuplas Tipos funciones 4. Parcialización 5. Polimorfismo y sobrecarga 12 / 38
  • 13. IM Tema 3: Tipos y clases Tipos compuestos Tipos tuplas Tipos tuplas Una tupla es una sucesión de elementos. (T1 , T2 , . . . , Tn ) es el tipo de las n–tuplas cuya componente i–ésima es de tipo Ti . Ejemplos de tuplas: (False,True) :: (Bool,Bool) (False,'a',True) :: (Bool,Char,Bool) Aridades: La aridad de una tupla es el número de componentes. La tupla de aridad 0, (), es la tupla vacía. No están permitidas las tuplas de longitud 1. Comentarios: El tipo de una tupla informa sobre su longitud: ('a','b') :: (Char,Char) ('a','b','c') :: (Char,Char,Char) El tipo de los elementos de una tupla puede ser cualquiera: (('a','b'),['c','d']) :: ((Char,Char),[Char]) 13 / 38
  • 14. IM Tema 3: Tipos y clases Tipos compuestos Tipos funciones Tema 3: Tipos y clases 1. Conceptos básicos sobre tipos 2. Tipos básicos 3. Tipos compuestos Tipos listas Tipos tuplas Tipos funciones 4. Parcialización 5. Polimorfismo y sobrecarga 14 / 38
  • 15. IM Tema 3: Tipos y clases Tipos compuestos Tipos funciones Tipos funciones Una función es una aplicación de valores de un tipo en valores de otro tipo. T1 → T2 es el tipo de las funciones que aplica valores del tipo T1 en valores del tipo T2 . Ejemplos de funciones: not :: Bool -> Bool isDigit :: Char -> Bool 15 / 38
  • 16. IM Tema 3: Tipos y clases Tipos compuestos Tipos funciones Funciones con múltiples argumentos o valores Ejemplo de función con múltiples argumentos: suma (x,y) es la suma de x e y. Por ejemplo, suma (2,3) es 5. suma :: (Int,Int) -> Int suma (x,y) = x+y Ejemplo de función con múltiples valores: deCeroA 5 es la lista de los números desde 0 hasta n. Por ejemplo, deCeroA n es [0,1,2,3,4,5]. deCeroA :: Int -> [Int] deCeroA n = [0..n] Notas: 1. En las definiciones se ha escrito la signatura de las funciones. 2. No es obligatorio escribir la signatura de las funciones. 3. Es conveniente escribir las signatura. 16 / 38
  • 17. IM Tema 3: Tipos y clases Parcialización Tema 3: Tipos y clases 1. Conceptos básicos sobre tipos 2. Tipos básicos 3. Tipos compuestos 4. Parcialización 5. Polimorfismo y sobrecarga 6. Clases básicas 17 / 38
  • 18. IM Tema 3: Tipos y clases Parcialización Parcialización Mecanismo de parcialización (currying en inglés): Las funciones de más de un argumento pueden interpretarse como funciones que toman un argumento y devuelven otra función con un argumento menos. Ejemplo de parcialización: suma' :: Int -> (Int -> Int) suma' x y = x+y suma’ toma un entero x y devuelve la función suma’ x que toma un entero y y devuelve la suma de x e y. Por ejemplo, *Main> :type suma' 2 suma' 2 :: Int -> Int *Main> :type suma' 2 3 suma' 2 3 :: Int 18 / 38
  • 19. IM Tema 3: Tipos y clases Parcialización Parcialización con tres argumentos Ejemplo de parcialización con tres argumentos: mult :: Int -> (Int -> (Int -> Int)) mult x y z = x*y*z mult toma un entero x y devuelve la función mult x que toma un entero y y devuelve la función mult x y que toma un entero z y devuelve x*y*z. Por ejemplo, *Main> :type mult 2 mult 2 :: Int -> (Int -> Int) *Main> :type mult 2 3 mult 2 3 :: Int -> Int *Main> :type mult 2 3 7 mult 2 3 7 :: Int 19 / 38
  • 20. IM Tema 3: Tipos y clases Parcialización Aplicación parcial Las funciones que toman sus argumentos de uno en uno se llaman currificadas (curried en inglés). Las funciones suma’ y mult son currificadas. Las funciones currificadas pueden aplicarse parcialmente. Por ejemplo, *Main> (suma' 2) 3 5 Pueden definirse funciones usando aplicaciones parciales. Por ejemplo, suc :: Int -> Int suc = suma' 1 suc x es el sucesor de x. Por ejemplo, suc 2 es 3. 20 / 38
  • 21. IM Tema 3: Tipos y clases Parcialización Convenios para reducir paréntesis Convenio 1: Las flechas en los tipos se asocia por la derecha. Por ejemplo, Int -> Int -> Int -> Int representa a Int -> (Int -> (Int -> Int)) Convenio 2: Las aplicaciones de funciones se asocia por la izquierda. Por ejemplo, mult x y z representa a ((mult x) y) z Nota: Todas las funciones con múltiples argumentos se definen en forma currificada, salvo que explícitamente se diga que los argumentos tienen que ser tuplas. 21 / 38
  • 22. IM Tema 3: Tipos y clases Polimorfismo y sobrecarga Tema 3: Tipos y clases 1. Conceptos básicos sobre tipos 2. Tipos básicos 3. Tipos compuestos 4. Parcialización 5. Polimorfismo y sobrecarga Tipos polimórficos Tipos sobrecargados 6. Clases básicas 22 / 38
  • 23. IM Tema 3: Tipos y clases Polimorfismo y sobrecarga Tipos polimórficos Tema 3: Tipos y clases 1. Conceptos básicos sobre tipos 2. Tipos básicos 3. Tipos compuestos 4. Parcialización 5. Polimorfismo y sobrecarga Tipos polimórficos Tipos sobrecargados 6. Clases básicas 23 / 38
  • 24. IM Tema 3: Tipos y clases Polimorfismo y sobrecarga Tipos polimórficos Tipos polimórficos Un tipo es polimórfico (“tiene muchas formas”) si contiene una variable de tipo. Una función es polimórfica si su tipo es polimórfico. La función length es polimófica: Comprobación: Prelude> :type length length :: [a] -> Int Significa que que para cualquier tipo a, length toma una lista de elementos de tipo a y devuelve un entero. a es una variable de tipos. Las variables de tipos tienen que empezar por minúscula. Ejemplos: length [1, 4, 7, 1] 4 length ["Lunes", "Martes", "Jueves"] 3 length [reverse, tail] 2 24 / 38
  • 25. IM Tema 3: Tipos y clases Polimorfismo y sobrecarga Tipos polimórficos Ejemplos de funciones polimórficas fst :: (a, b) -> a fst (1,'x') 1 fst (True,"Hoy") True head :: [a] -> a head [2,1,4] 2 head ['b','c'] 'b' take :: Int -> [a] -> [a] take 3 [3,5,7,9,4] [3,5,7] take 2 ['l','o','l','a'] "lo" take 2 "lola" "lo" zip :: [a] -> [b] -> [(a, b)] zip [3,5] "lo" [(3,'l'),(5,'o')] id :: a -> a id 3 3 id 'x' 'x' 25 / 38
  • 26. IM Tema 3: Tipos y clases Polimorfismo y sobrecarga Tipos sobrecargados Tema 3: Tipos y clases 1. Conceptos básicos sobre tipos 2. Tipos básicos 3. Tipos compuestos 4. Parcialización 5. Polimorfismo y sobrecarga Tipos polimórficos Tipos sobrecargados 6. Clases básicas 26 / 38
  • 27. IM Tema 3: Tipos y clases Polimorfismo y sobrecarga Tipos sobrecargados Tipos sobrecargados Un tipo está sobrecargado si contiene una restricción de clases. Una función está sobregargada si su tipo está sobrecargado. La función sum está sobrecargada: Comprobación: Prelude> :type sum sum :: (Num a) => [a] -> a Significa que que para cualquier tipo numérico a, sum toma una lista de elementos de tipo a y devuelve un valor de tipo a. Num a es una restricción de clases. Las restricciones de clases son expresiones de la forma C a, donde C es el nombre de una clase y a es una variable de tipo. Ejemplos: sum [2, 3, 5] 10 sum [2.1, 3.23, 5.345] 10.675 27 / 38
  • 28. IM Tema 3: Tipos y clases Polimorfismo y sobrecarga Tipos sobrecargados Ejemplos de tipos sobrecargados Ejemplos de funciones sobrecargadas: (-) :: (Num a) => a -> a -> a (*) :: (Num a) => a -> a -> a negate :: (Num a) => a -> a abs :: (Num a) => a -> a signum :: (Num a) => a -> a Ejemplos de números sobrecargados: 5 :: (Num t) => t 5.2 :: (Fractional t) => t 28 / 38
  • 29. IM Tema 3: Tipos y clases Clases básicas Tema 3: Tipos y clases 1. Conceptos básicos sobre tipos 2. Tipos básicos 3. Tipos compuestos 4. Parcialización 5. Polimorfismo y sobrecarga 6. Clases básicas 29 / 38
  • 30. IM Tema 3: Tipos y clases Clases básicas Clases básicas Una clase es una colección de tipos junto con ciertas operaciones sobrecargadas llamadas métodos. Clases básicas: Eq tipos comparables por igualdad Ord tipos ordenados Show tipos mostrables Read tipos legibles Num tipos numéricos Integral tipos enteros Fractional tipos fraccionarios 30 / 38
  • 31. IM Tema 3: Tipos y clases Clases básicas La clase Eq (tipos comparables por igualdad) Eq contiene los tipos cuyos valores con comparables por igualdad. Métodos: (==) :: a -> a -> Bool (/=) :: a -> a -> Bool Instancias: Bool, Char, String, Int, Integer, Float y Double. tipos compuestos: listas y tuplas. Ejemplos: False == True False False /= True True 'a' == 'b' False "aei" == "aei" True [2,3] == [2,3,2] False ('a',5) == ('a',5) True 31 / 38
  • 32. IM Tema 3: Tipos y clases Clases básicas La clase Ord (tipos ordenados) Ord es la subclase de Eq de tipos cuyos valores están ordenados. Métodos: (<), (<=), (>), (>=) :: a -> a -> Bool min, max :: a -> a -> a Instancias: Bool, Char, String, Int, Integer, Float y Double. tipos compuestos: listas y tuplas. Ejemplos: False < True True min 'a' 'b' 'a' "elegante" < "elefante" False [1,2,3] < [1,2] False ('a',2) < ('a',1) False ('a',2) < ('b',1) True 32 / 38
  • 33. IM Tema 3: Tipos y clases Clases básicas La clase Show (tipos mostrables) Show contiene los tipos cuyos valores se pueden convertir en cadenas de caracteres. Método: show :: a -> String Instancias: Bool, Char, String, Int, Integer, Float y Double. tipos compuestos: listas y tuplas. Ejemplos: show False "False" show 'a' "'a'" show 123 "123" show [1,2,3] "[1,2,3]" show ('a',True) "('a',True)" 33 / 38
  • 34. IM Tema 3: Tipos y clases Clases básicas La clase Read (tipos legibles) Read contiene los tipos cuyos valores se pueden obtener a partir de cadenas de caracteres. Método: read :: String -> a Instancias: Bool, Char, String, Int, Integer, Float y Double. tipos compuestos: listas y tuplas. Ejemplos: read "False" :: Bool False read "'a'" :: Char 'a' read "123" :: Int 123 read "[1,2,3]" :: [Int] [1,2,3] read "('a',True)" :: (Char,Bool) ('a',True) 34 / 38
  • 35. IM Tema 3: Tipos y clases Clases básicas La clase Num (tipos numéricos) Num es la subclase de Eq y Ord de tipos cuyos valores son números Métodos: (+), (*), (-) :: a -> a -> a negate, abs, signum :: a -> a Instancias: Int, Integer, Float y Double. Ejemplos: 2+3 5 2.3+4.2 6.5 negate 2.7 -2.7 abs (-5) 5 signum (-5) -1 35 / 38
  • 36. IM Tema 3: Tipos y clases Clases básicas La clase Integral (tipos enteros) Integral es la subclase de Num cuyo tipos tienen valores enteros. Métodos: div :: a -> a -> a mod :: a -> a -> a Instancias: Int e Integer. Ejemplos: 11 `div` 4 2 11 `mod` 4 3 36 / 38
  • 37. IM Tema 3: Tipos y clases Clases básicas La clase Fractional (tipos fraccionarios) Fractional es la subclase de Num cuyo tipos tienen valores no son enteros. Métodos: (/) :: a -> a -> a recip :: a -> a Instancias: Float y Double. Ejemplos: 7.0 / 2.0 3.5 recip 0.2 5.0 37 / 38
  • 38. IM Tema 3: Tipos y clases Bibliografía Bibliografía 1. R. Bird. Introducción a la programación funcional con Haskell. Prentice Hall, 2000. Cap. 2: Tipos de datos simples. 2. G. Hutton Programming in Haskell. Cambridge University Press, 2007. Cap. 3: Types and classes. 3. B. O’Sullivan, D. Stewart y J. Goerzen Real World Haskell. O’Reilly, 2008. Cap. 2: Types and Functions. 4. B.C. Ruiz, F. Gutiérrez, P. Guerrero y J.E. Gallardo. Razonando con Haskell. Thompson, 2004. Cap. 2: Introducción a Haskell. Cap. 5: El sistema de clases de Haskell. 5. S. Thompson. Haskell: The Craft of Functional Programming, Second Edition. Addison-Wesley, 1999. Cap. 3: Basic types and definitions. 38 / 38