SlideShare ist ein Scribd-Unternehmen logo
1 von 38
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

Polimorfismo
PolimorfismoPolimorfismo
Polimorfismokayth19
 
Practicas prolog
Practicas prologPracticas prolog
Practicas prologmaxsp5566
 
Generación código intermedio 2
Generación código intermedio 2Generación código intermedio 2
Generación código intermedio 2Humano Terricola
 
Presentacion fase de lanzamiento tsp
Presentacion fase de lanzamiento tspPresentacion fase de lanzamiento tsp
Presentacion fase de lanzamiento tsplagh
 
Lema de bombeo
Lema de bombeoLema de bombeo
Lema de bombeoOmega Tech
 
Diagramas de clases y aplicaciones JAVA en NetBeans 6.9.1
Diagramas de clases y aplicaciones  JAVA en NetBeans 6.9.1Diagramas de clases y aplicaciones  JAVA en NetBeans 6.9.1
Diagramas de clases y aplicaciones JAVA en NetBeans 6.9.1Henry Upla
 
Diagramas UML
Diagramas UMLDiagramas UML
Diagramas UML1da4
 
Presentacion ciclos-1
Presentacion ciclos-1Presentacion ciclos-1
Presentacion ciclos-1sena
 
2...2 expresiones regulares, cerradura, fractales, automata
2...2 expresiones regulares, cerradura, fractales, automata2...2 expresiones regulares, cerradura, fractales, automata
2...2 expresiones regulares, cerradura, fractales, automataJacqui Venegas
 
TAREAS DE LA ING. DE REQUISITOS
TAREAS DE LA ING. DE REQUISITOSTAREAS DE LA ING. DE REQUISITOS
TAREAS DE LA ING. DE REQUISITOSxinithazangels
 
Programación 3: algoritmo de Prim y de Kruskal
Programación 3: algoritmo de Prim y de KruskalProgramación 3: algoritmo de Prim y de Kruskal
Programación 3: algoritmo de Prim y de KruskalAngel Vázquez Patiño
 
Programación Orientada a Objetos - Resumen
Programación Orientada a Objetos - ResumenProgramación Orientada a Objetos - Resumen
Programación Orientada a Objetos - ResumenKarlytoz_36
 
Automatas y compiladores clase1
Automatas y compiladores clase1Automatas y compiladores clase1
Automatas y compiladores clase1Germania Rodriguez
 
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
 

Was ist angesagt? (20)

Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
 
Practicas prolog
Practicas prologPracticas prolog
Practicas prolog
 
Generación código intermedio 2
Generación código intermedio 2Generación código intermedio 2
Generación código intermedio 2
 
Automatas y gramaticas
Automatas y gramaticasAutomatas y gramaticas
Automatas y gramaticas
 
Presentacion fase de lanzamiento tsp
Presentacion fase de lanzamiento tspPresentacion fase de lanzamiento tsp
Presentacion fase de lanzamiento tsp
 
Lema de bombeo
Lema de bombeoLema de bombeo
Lema de bombeo
 
Diagramas de clases y aplicaciones JAVA en NetBeans 6.9.1
Diagramas de clases y aplicaciones  JAVA en NetBeans 6.9.1Diagramas de clases y aplicaciones  JAVA en NetBeans 6.9.1
Diagramas de clases y aplicaciones JAVA en NetBeans 6.9.1
 
Diagramas UML
Diagramas UMLDiagramas UML
Diagramas UML
 
Pilas, colas, y listas estructura de datos
Pilas, colas, y listas estructura de datosPilas, colas, y listas estructura de datos
Pilas, colas, y listas estructura de datos
 
Ciclo Vida del Software
Ciclo Vida del SoftwareCiclo Vida del Software
Ciclo Vida del Software
 
Presentacion ciclos-1
Presentacion ciclos-1Presentacion ciclos-1
Presentacion ciclos-1
 
2...2 expresiones regulares, cerradura, fractales, automata
2...2 expresiones regulares, cerradura, fractales, automata2...2 expresiones regulares, cerradura, fractales, automata
2...2 expresiones regulares, cerradura, fractales, automata
 
TAREAS DE LA ING. DE REQUISITOS
TAREAS DE LA ING. DE REQUISITOSTAREAS DE LA ING. DE REQUISITOS
TAREAS DE LA ING. DE REQUISITOS
 
Modelo espiral
Modelo espiralModelo espiral
Modelo espiral
 
Programación 3: algoritmo de Prim y de Kruskal
Programación 3: algoritmo de Prim y de KruskalProgramación 3: algoritmo de Prim y de Kruskal
Programación 3: algoritmo de Prim y de Kruskal
 
Analizador léxico
Analizador léxicoAnalizador léxico
Analizador léxico
 
Programación Orientada a Objetos - Resumen
Programación Orientada a Objetos - ResumenProgramación Orientada a Objetos - Resumen
Programación Orientada a Objetos - Resumen
 
Automatas y compiladores clase1
Automatas y compiladores clase1Automatas y compiladores clase1
Automatas y compiladores clase1
 
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
 
Ejercicios uml
Ejercicios umlEjercicios uml
Ejercicios uml
 

Andere mochten auch

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
 
Tema 9: Declaraciones de tipos y clases en Haskell
Tema 9: Declaraciones de tipos y clases en HaskellTema 9: Declaraciones de tipos y clases en Haskell
Tema 9: Declaraciones de tipos y clases 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
 

Andere mochten auch (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
 
Tema 9: Declaraciones de tipos y clases en Haskell
Tema 9: Declaraciones de tipos y clases en HaskellTema 9: Declaraciones de tipos y clases en Haskell
Tema 9: Declaraciones de tipos y clases 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
 

Ähnlich wie Tema 3: Tipos y clases en Haskell

Ähnlich wie 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
 

Mehr von 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
 

Mehr von 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
 

Kürzlich hochgeladen

LA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptxLA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptxlclcarmen
 
activ4-bloque4 transversal doctorado.pdf
activ4-bloque4 transversal doctorado.pdfactiv4-bloque4 transversal doctorado.pdf
activ4-bloque4 transversal doctorado.pdfRosabel UA
 
Desarrollo y Aplicación de la Administración por Valores
Desarrollo y Aplicación de la Administración por ValoresDesarrollo y Aplicación de la Administración por Valores
Desarrollo y Aplicación de la Administración por ValoresJonathanCovena1
 
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICABIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICAÁngel Encinas
 
Tema 10. Dinámica y funciones de la Atmosfera 2024
Tema 10. Dinámica y funciones de la Atmosfera 2024Tema 10. Dinámica y funciones de la Atmosfera 2024
Tema 10. Dinámica y funciones de la Atmosfera 2024IES Vicent Andres Estelles
 
RESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACION
RESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACIONRESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACION
RESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACIONamelia poma
 
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docxPLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docxiemerc2024
 
1ro Programación Anual D.P.C.C planificación anual del área para el desarroll...
1ro Programación Anual D.P.C.C planificación anual del área para el desarroll...1ro Programación Anual D.P.C.C planificación anual del área para el desarroll...
1ro Programación Anual D.P.C.C planificación anual del área para el desarroll...JoseMartinMalpartida1
 
Feliz Día de la Madre - 5 de Mayo, 2024.pdf
Feliz Día de la Madre - 5 de Mayo, 2024.pdfFeliz Día de la Madre - 5 de Mayo, 2024.pdf
Feliz Día de la Madre - 5 de Mayo, 2024.pdfMercedes Gonzalez
 
CONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptx
CONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptxCONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptx
CONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptxroberthirigoinvasque
 
Biografía de Charles Coulomb física .pdf
Biografía de Charles Coulomb física .pdfBiografía de Charles Coulomb física .pdf
Biografía de Charles Coulomb física .pdfGruberACaraballo
 
AEC 2. Aventura en el Antiguo Egipto.pptx
AEC 2. Aventura en el Antiguo Egipto.pptxAEC 2. Aventura en el Antiguo Egipto.pptx
AEC 2. Aventura en el Antiguo Egipto.pptxhenarfdez
 
6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primaria6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primariaWilian24
 
Linea del tiempo - Filosofos Cristianos.docx
Linea del tiempo - Filosofos Cristianos.docxLinea del tiempo - Filosofos Cristianos.docx
Linea del tiempo - Filosofos Cristianos.docxEnriqueLineros1
 
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESOPrueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESOluismii249
 
FUERZA Y MOVIMIENTO ciencias cuarto basico.ppt
FUERZA Y MOVIMIENTO ciencias cuarto basico.pptFUERZA Y MOVIMIENTO ciencias cuarto basico.ppt
FUERZA Y MOVIMIENTO ciencias cuarto basico.pptNancyMoreiraMora1
 
prostitución en España: una mirada integral!
prostitución en España: una mirada integral!prostitución en España: una mirada integral!
prostitución en España: una mirada integral!CatalinaAlfaroChryso
 
ACERTIJO LA RUTA DEL MARATÓN OLÍMPICO DEL NÚMERO PI EN PARÍS. Por JAVIER SOL...
ACERTIJO LA RUTA DEL MARATÓN OLÍMPICO DEL NÚMERO PI EN  PARÍS. Por JAVIER SOL...ACERTIJO LA RUTA DEL MARATÓN OLÍMPICO DEL NÚMERO PI EN  PARÍS. Por JAVIER SOL...
ACERTIJO LA RUTA DEL MARATÓN OLÍMPICO DEL NÚMERO PI EN PARÍS. Por JAVIER SOL...JAVIER SOLIS NOYOLA
 

Kürzlich hochgeladen (20)

LA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptxLA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptx
 
activ4-bloque4 transversal doctorado.pdf
activ4-bloque4 transversal doctorado.pdfactiv4-bloque4 transversal doctorado.pdf
activ4-bloque4 transversal doctorado.pdf
 
Desarrollo y Aplicación de la Administración por Valores
Desarrollo y Aplicación de la Administración por ValoresDesarrollo y Aplicación de la Administración por Valores
Desarrollo y Aplicación de la Administración por Valores
 
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICABIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
 
Tema 10. Dinámica y funciones de la Atmosfera 2024
Tema 10. Dinámica y funciones de la Atmosfera 2024Tema 10. Dinámica y funciones de la Atmosfera 2024
Tema 10. Dinámica y funciones de la Atmosfera 2024
 
RESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACION
RESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACIONRESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACION
RESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACION
 
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docxPLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
 
1ro Programación Anual D.P.C.C planificación anual del área para el desarroll...
1ro Programación Anual D.P.C.C planificación anual del área para el desarroll...1ro Programación Anual D.P.C.C planificación anual del área para el desarroll...
1ro Programación Anual D.P.C.C planificación anual del área para el desarroll...
 
Feliz Día de la Madre - 5 de Mayo, 2024.pdf
Feliz Día de la Madre - 5 de Mayo, 2024.pdfFeliz Día de la Madre - 5 de Mayo, 2024.pdf
Feliz Día de la Madre - 5 de Mayo, 2024.pdf
 
CONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptx
CONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptxCONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptx
CONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptx
 
Biografía de Charles Coulomb física .pdf
Biografía de Charles Coulomb física .pdfBiografía de Charles Coulomb física .pdf
Biografía de Charles Coulomb física .pdf
 
Los dos testigos. Testifican de la Verdad
Los dos testigos. Testifican de la VerdadLos dos testigos. Testifican de la Verdad
Los dos testigos. Testifican de la Verdad
 
AEC 2. Aventura en el Antiguo Egipto.pptx
AEC 2. Aventura en el Antiguo Egipto.pptxAEC 2. Aventura en el Antiguo Egipto.pptx
AEC 2. Aventura en el Antiguo Egipto.pptx
 
6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primaria6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primaria
 
Linea del tiempo - Filosofos Cristianos.docx
Linea del tiempo - Filosofos Cristianos.docxLinea del tiempo - Filosofos Cristianos.docx
Linea del tiempo - Filosofos Cristianos.docx
 
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESOPrueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
 
FUERZA Y MOVIMIENTO ciencias cuarto basico.ppt
FUERZA Y MOVIMIENTO ciencias cuarto basico.pptFUERZA Y MOVIMIENTO ciencias cuarto basico.ppt
FUERZA Y MOVIMIENTO ciencias cuarto basico.ppt
 
prostitución en España: una mirada integral!
prostitución en España: una mirada integral!prostitución en España: una mirada integral!
prostitución en España: una mirada integral!
 
Tema 11. Dinámica de la hidrosfera 2024
Tema 11.  Dinámica de la hidrosfera 2024Tema 11.  Dinámica de la hidrosfera 2024
Tema 11. Dinámica de la hidrosfera 2024
 
ACERTIJO LA RUTA DEL MARATÓN OLÍMPICO DEL NÚMERO PI EN PARÍS. Por JAVIER SOL...
ACERTIJO LA RUTA DEL MARATÓN OLÍMPICO DEL NÚMERO PI EN  PARÍS. Por JAVIER SOL...ACERTIJO LA RUTA DEL MARATÓN OLÍMPICO DEL NÚMERO PI EN  PARÍS. Por JAVIER SOL...
ACERTIJO LA RUTA DEL MARATÓN OLÍMPICO DEL NÚMERO PI EN PARÍS. Por JAVIER SOL...
 

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