SlideShare una empresa de Scribd logo
Tema 15: El TAD de las colas
          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 15: El TAD de las colas




Tema 15: El TAD de las colas
 1. Especificación del TAD de las colas
       Signatura del TAD de las colas
       Propiedades del TAD de las colas

 2. Implementaciones del TAD de las colas
       Implementación de las colas mediante listas
       Implementación de las colas mediante pares de listas

 3. Comprobación de las implementaciones con QuickCheck
      Librerías auxiliares
      Generador de colas
      Especificación de las propiedades de las colas
      Comprobación de las propiedades

                                                              2 / 36
IM Tema 15: El TAD de las colas
  Especificación del TAD de las colas
     Signatura del TAD de las colas



Tema 15: El TAD de las colas

 1. Especificación del TAD de las colas
       Signatura del TAD de las colas
       Propiedades del TAD de las colas

 2. Implementaciones del TAD de las colas

 3. Comprobación de las implementaciones con QuickCheck




                                                          3 / 36
IM Tema 15: El TAD de las colas
  Especificación del TAD de las colas
     Signatura del TAD de las colas



Descripción informal de las colas
         Una cola es una estructura de datos, caracterizada por ser una
         secuencia de elementos en la que la operación de inserción se
         realiza por un extremo (el posterior o final) y la operación de
         extracción por el otro (el anterior o frente).
         Las colas también se llaman estructuras FIFO (del inglés First In
         First Out), debido a que el primer elemento en entrar será
         también el primero en salir.
         Analogía con las colas del cine.




                                                                             4 / 36
IM Tema 15: El TAD de las colas
  Especificación del TAD de las colas
     Signatura del TAD de las colas



Signatura del TAD colas
         Signatura:
          vacia :: Cola a
          inserta :: a -> Cola a -> Cola a
          primero :: Cola a -> a
          resto :: Cola a -> Cola a
          esVacia :: Cola a -> Bool
          valida :: Cola a -> Bool
         Descripción de las operaciones:
                 vacia es la cola vacía.
                 (inserta x c) es la cola obtenida añadiendo x al final de c.
                 (primero c) es el primero de la cola c.
                 (resto c) es la cola obtenida eliminando el primero de c.
                 (esVacia c) se verifica si c es la cola vacía.
                 (valida c) se verifica si c representa una cola válida.

                                                                               5 / 36
IM Tema 15: El TAD de las colas
  Especificación del TAD de las colas
     Propiedades del TAD de las colas



Tema 15: El TAD de las colas

 1. Especificación del TAD de las colas
       Signatura del TAD de las colas
       Propiedades del TAD de las colas

 2. Implementaciones del TAD de las colas

 3. Comprobación de las implementaciones con QuickCheck




                                                          6 / 36
IM Tema 15: El TAD de las colas
  Especificación del TAD de las colas
     Propiedades del TAD de las colas



Propiedades del TAD de las colas
    1. primero (inserta x vacia) == x
    2. Si c es una cola no vacía, entonces
       primero (inserta x c) == primero c,
    3. resto (inserta x vacia) == vacia
    4. Si c es una cola no vacía, entonces
       resto (inserta x c) == inserta x (resto c)
    5. esVacia vacia
    6. not (esVacia (inserta x c))




                                                    7 / 36
IM Tema 15: El TAD de las colas
  Implementaciones del TAD de las colas
     Implementación de las colas mediante listas



Tema 15: El TAD de las colas

 1. Especificación del TAD de las colas

 2. Implementaciones del TAD de las colas
       Implementación de las colas mediante listas
       Implementación de las colas mediante pares de listas

 3. Comprobación de las implementaciones con QuickCheck




                                                              8 / 36
IM Tema 15: El TAD de las colas
  Implementaciones del TAD de las colas
     Implementación de las colas mediante listas



Implementación de las colas mediante listas
         Cabecera del módulo:

         module ColaConListas
             (Cola,
              vacia, -- Cola                       a
              inserta, -- a ->                     Cola   a -> Cola a
              primero, -- Cola                     a ->   a
              resto, -- Cola                       a ->   Cola a
              esVacia, -- Cola                     a ->   Bool
              valida -- Cola                       a ->   Bool
             ) where
         Representación de las colas mediante listas:

         newtype Cola a = C [a] deriving (Show, Eq)
                                                                        9 / 36
IM Tema 15: El TAD de las colas
  Implementaciones del TAD de las colas
     Implementación de las colas mediante listas



Implementación de las colas mediante listas
         Ejemplo de cola: c1 es la cola obtenida añadiéndole a la cola
         vacía los números del 1 al 10. Por ejemplo,
          ghci> c1
          C [10,9,8,7,6,5,4,3,2,1]

         c1 = foldr inserta vacia [1..10]

         vacia es la cola vacía. Por ejemplo,
          ghci> vacia
          C []

         vacia :: Cola a
         vacia = C []

                                                                         10 / 36
IM Tema 15: El TAD de las colas
  Implementaciones del TAD de las colas
     Implementación de las colas mediante listas



Implementación de las colas mediante listas
         (inserta x c) es la cola obtenida añadiendo x al final de la
         cola c. Por ejemplo,
          inserta 12 c1        C [10,9,8,7,6,5,4,3,2,1,12]

         inserta :: a -> Cola a -> Cola a
         inserta x (C c) = C (c ++ [x])

         (primero c) es el primer elemento de la cola c. Por ejemplo,
          primero c1        10

         primero :: Cola a -> a
         primero (C (x:_)) = x
         primero (C [])    = error "primero: cola vacia"

                                                                        11 / 36
IM Tema 15: El TAD de las colas
  Implementaciones del TAD de las colas
     Implementación de las colas mediante listas



Implementación de las colas mediante listas
         (resto c) es la cola obtenida eliminando el primer elemento de
         la cola c. Por ejemplo,
          resto c1          C [9,8,7,6,5,4,3,2,1]

         resto :: Cola a -> Cola a
         resto (C (_:xs)) = C xs
         resto (C [])     = error "resto: cola vacia"

         (esVacia c) se verifica si c es la cola vacía. Por ejemplo,
          esVacia c1           False
          esVacia vacia        True

         esVacia :: Cola a -> Bool
         esVacia (C xs) = null xs
                                                                          12 / 36
IM Tema 15: El TAD de las colas
  Implementaciones del TAD de las colas
     Implementación de las colas mediante listas



Implementación de las colas mediante listas
         (valida c) se verifica si c representa una cola válida. Con esta
         representación, todas las colas son válidas.

         valida :: Cola a -> Bool
         valida c = True




                                                                           13 / 36
IM Tema 15: El TAD de las colas
  Implementaciones del TAD de las colas
     Implementación de las colas mediante pares de listas



Tema 15: El TAD de las colas

 1. Especificación del TAD de las colas

 2. Implementaciones del TAD de las colas
       Implementación de las colas mediante listas
       Implementación de las colas mediante pares de listas

 3. Comprobación de las implementaciones con QuickCheck




                                                              14 / 36
IM Tema 15: El TAD de las colas
  Implementaciones del TAD de las colas
     Implementación de las colas mediante pares de listas



Las colas como pares de listas
         En esta implementación, una cola c se representa mediante un
         par de listas (xs,ys) de modo que los elementos de c son, en
         ese orden, los elementos de la lista xs++(reverse ys).
         Al dividir la lista en dos parte e invertir la segunda de ellas,
         esperamos hacer más eficiente las operaciones sobre las colas.
         Impondremos también una restricción adicional sobre la
         representación: las colas serán representadas mediante pares
         (xs,ys) tales que si xs es vacía, entonces ys será también vacía.
         Esta restricción ha de mantenerse por las operaciones que crean
         colas.




                                                                             15 / 36
IM Tema 15: El TAD de las colas
  Implementaciones del TAD de las colas
     Implementación de las colas mediante pares de listas



Implementación de las colas como pares de listas
         Cabecera del módulo

         module ColaConDosListas
             (Cola,
              vacia, -- Cola a
              inserta, -- a -> Cola                         a -> Cola a
              primero, -- Cola a ->                         a
              resto, -- Cola a ->                           Cola a
              esVacia, -- Cola a ->                         Bool
              valida -- Cola a ->                           Bool
             ) where
         Las colas como pares de listas

         newtype Cola a = C ([a],[a])
                                                                          16 / 36
IM Tema 15: El TAD de las colas
  Implementaciones del TAD de las colas
     Implementación de las colas mediante pares de listas



Implementación de las colas como pares de listas
         (valida c) se verifica si la cola c es válida; es decir, si su
         primer elemento es vacío entonces también lo es el segundo. Por
         ejemplo,
          valida (C ([2],[5]))           True
          valida (C ([2],[]))            True
          valida (C ([],[5]))            False

         valida:: Cola a -> Bool
         valida (C (xs,ys)) = not (null xs) || null ys




                                                                           17 / 36
IM Tema 15: El TAD de las colas
  Implementaciones del TAD de las colas
     Implementación de las colas mediante pares de listas



Implementación de las colas como pares de listas
         Procedimiento de escritura de colas como pares de listas.

         instance Show a => Show (Cola a) where
             showsPrec p (C (xs,ys)) cad
                 = showString "C " (showList (xs ++ (reverse ys)) c

         Ejemplo de cola: c1 es la cola obtenida añadiéndole a la cola
         vacía los números del 1 al 10. Por ejemplo,
          ghci> c1
          C [10,9,8,7,6,5,4,3,2,1]

         c1 :: Cola Int
         c1 = foldr inserta vacia [1..10]

                                                                         18 / 36
IM Tema 15: El TAD de las colas
  Implementaciones del TAD de las colas
     Implementación de las colas mediante pares de listas



Implementación de las colas como pares de listas
         vacia es la cola vacía. Por ejemplo,
          ghci> c1
          C [10,9,8,7,6,5,4,3,2,1]

         vacia :: Cola a
         vacia = C ([],[])

         (inserta x c) es la cola obtenida añadiendo x al final de la
         cola c. Por ejemplo,
          inserta 12 c1        C [10,9,8,7,6,5,4,3,2,1,12]

         inserta :: a -> Cola a -> Cola a
         inserta y (C (xs,ys)) = C (normaliza (xs,y:ys))

                                                                       19 / 36
IM Tema 15: El TAD de las colas
  Implementaciones del TAD de las colas
     Implementación de las colas mediante pares de listas



Implementación de las colas como pares de listas
         (normaliza p) es la cola obtenida al normalizar el par de listas
         p. Por ejemplo,
          normaliza ([],[2,5,3])           ([3,5,2],[])
          normaliza ([4],[2,5,3])          ([4],[2,5,3])

         normaliza :: ([a],[a]) -> ([a],[a])
         normaliza ([], ys) = (reverse ys, [])
         normaliza p        = p
         (primero c) es el primer elemento de la cola c. Por ejemplo,
          primero c1        10

         primero :: Cola a -> a
         primero (C (x:xs,ys)) = x
         primero _             = error "primero: cola vacia"
                                                                            20 / 36
IM Tema 15: El TAD de las colas
  Implementaciones del TAD de las colas
     Implementación de las colas mediante pares de listas



Implementación de las colas como pares de listas
         (resto c) es la cola obtenida eliminando el primer elemento de
         la cola c. Por ejemplo,
          resto c1          C [9,8,7,6,5,4,3,2,1]

         resto :: Cola a -> Cola a
         resto (C (x:xs,ys)) = C (normaliza (xs,ys))
         resto (C ([],[])) = error "resto: cola vacia"

         (esVacia c) se verifica si c es la cola vacía. Por ejemplo,
          esVacia c1           False
          esVacia vacia        True

         esVacia :: Cola a -> Bool
         esVacia (C (xs,_)) = null xs
                                                                          21 / 36
IM Tema 15: El TAD de las colas
  Implementaciones del TAD de las colas
     Implementación de las colas mediante pares de listas



Implementación de las colas como pares de listas
         (elementos c) es la lista de los elementos de la cola c en el
         orden de la cola. Por ejemplo,
          elementos (C ([3,2],[5,4,7]))             [3,2,7,4,5]

         elementos:: Cola a -> [a]
         elementos (C (xs,ys)) = xs ++ (reverse ys)




                                                                         22 / 36
IM Tema 15: El TAD de las colas
  Implementaciones del TAD de las colas
     Implementación de las colas mediante pares de listas



Implementación de las colas como pares de listas
         (igualColas c1 c2) se verifica si las colas c1 y c2 son iguales.
          ghci> igualColas (C ([3,2],[5,4,7])) (C ([3],[5,4,7,2]))
          True
          ghci> igualColas (C ([3,2],[5,4,7])) (C ([],[5,4,7,2,3]))
          False

         igualColas c1 c2 =
             valida c1 && valida c2 &&
             elementos c1 == elementos c2

         Extensión de la igualdad a las colas:

         instance (Eq a) => Eq (Cola a) where
             (==) = igualColas
                                                                    23 / 36
IM Tema 15: El TAD de las colas
  Comprobación de las implementaciones con QuickCheck
     Librerías auxiliares



Tema 15: El TAD de las colas

 1. Especificación del TAD de las colas

 2. Implementaciones del TAD de las colas

 3. Comprobación de las implementaciones con QuickCheck
      Librerías auxiliares
      Generador de colas
      Especificación de las propiedades de las colas
      Comprobación de las propiedades




                                                          24 / 36
IM Tema 15: El TAD de las colas
  Comprobación de las implementaciones con QuickCheck
     Librerías auxiliares



Importación de librerías
         Importación de la implementación de las colas que se desea
         comprobar.

         import ColaConListas
         -- import ColaConDosListas

         Importación de librerías auxiliares

         import             Data.List
         import             Test.QuickCheck
         import             Test.Framework
         import             Test.Framework.Providers.QuickCheck2



                                                                      25 / 36
IM Tema 15: El TAD de las colas
  Comprobación de las implementaciones con QuickCheck
     Generador de colas



Tema 15: El TAD de las colas

 1. Especificación del TAD de las colas

 2. Implementaciones del TAD de las colas

 3. Comprobación de las implementaciones con QuickCheck
      Librerías auxiliares
      Generador de colas
      Especificación de las propiedades de las colas
      Comprobación de las propiedades




                                                          26 / 36
IM Tema 15: El TAD de las colas
  Comprobación de las implementaciones con QuickCheck
     Generador de colas



Generador de colas
         genCola es un generador de colas de enteros. Por ejemplo,
          ghci> sample genCola
          C ([7,8,4,3,7],[5,3,3])
          C ([1],[13])
          ...

         genCola :: Gen (Cola Int)
         genCola = frequency [(1, return vacia),
                              (30, do n <- choose (10,100)
                                      xs <- vectorOf n arbitrary
                                      return (creaCola xs))]
                   where creaCola = foldr inserta vacia

         instance Arbitrary (Cola Int) where
             arbitrary = genCola
                                                                     27 / 36
IM Tema 15: El TAD de las colas
  Comprobación de las implementaciones con QuickCheck
     Generador de colas



Corrección del generador de colas
         Propiedad: Todo los elementos generados por genCola son colas
         válidas.

         prop_genCola_correcto :: Cola Int -> Bool
         prop_genCola_correcto c = valida c

         Comprobación.
          ghci> quickCheck prop_genCola_correcto
          +++ OK, passed 100 tests.




                                                                         28 / 36
IM Tema 15: El TAD de las colas
  Comprobación de las implementaciones con QuickCheck
     Especificación de las propiedades de las colas



Tema 15: El TAD de las colas

 1. Especificación del TAD de las colas

 2. Implementaciones del TAD de las colas

 3. Comprobación de las implementaciones con QuickCheck
      Librerías auxiliares
      Generador de colas
      Especificación de las propiedades de las colas
      Comprobación de las propiedades




                                                          29 / 36
IM Tema 15: El TAD de las colas
  Comprobación de las implementaciones con QuickCheck
     Especificación de las propiedades de las colas



Especificación de las propiedades de las colas
         El primero de la cola obtenida añadiendo x a la cola vacía es x.

         prop_primero_inserta_vacia :: Int -> Bool
         prop_primero_inserta_vacia x =
             primero (inserta x vacia) == x

         Si una cola no está vacía, su primer elemento no varía al añadirle
         un elemento.

         prop_primero_inserta_no_vacia :: Cola Int -> Int -> Int
                                          -> Bool
         prop_primero_inserta_no_vacia c x y =
             primero (inserta x c') == primero c'
             where c' = inserta y vacia

                                                                              30 / 36
IM Tema 15: El TAD de las colas
  Comprobación de las implementaciones con QuickCheck
     Especificación de las propiedades de las colas



Especificación de las propiedades de las colas
         El resto de la cola obtenida insertando un elemento en la cola
         vacía es la cola vacía.

         prop_resto_inserta_vacia :: Int -> Bool
         prop_resto_inserta_vacia x =
             resto (inserta x vacia) == vacia
         Las operaciones de encolar y desencolar conmutan.

         prop_resto_inserta_en_no_vacia :: Cola Int -> Int -> Int
                                           -> Bool
         prop_resto_inserta_en_no_vacia c x y =
             resto (inserta x c') == inserta x (resto c')
             where c' = inserta y c

                                                                          31 / 36
IM Tema 15: El TAD de las colas
  Comprobación de las implementaciones con QuickCheck
     Especificación de las propiedades de las colas



Especificación de las propiedades de las colas
         vacia es una cola vacía.

         prop_vacia_es_vacia :: Bool
         prop_vacia_es_vacia =
             esVacia vacia
         La cola obtenida insertando un elemento no es vacía.

         prop_inserta_no_es_vacia :: Int -> Cola Int -> Bool
         prop_inserta_no_es_vacia x c =
             not (esVacia (inserta x c))




                                                                32 / 36
IM Tema 15: El TAD de las colas
  Comprobación de las implementaciones con QuickCheck
     Especificación de las propiedades de las colas



Especificación de las propiedades de las colas
         La cola vacía es válida.

         prop_valida_vacia :: Bool
         prop_valida_vacia = valida vacia
         Al añadirle un elemento a una cola válida se obtiene otra válida.

         prop_valida_inserta :: Cola Int -> Int -> Property
         prop_valida_inserta c x =
             valida c ==> valida (inserta x c)
         El resto de una cola válida y no vacía es una cola válida.

         prop_valida_resto :: Cola Int -> Property
         prop_valida_resto c =
             valida c && not (esVacia c) ==> valida (resto c)
                                                                             33 / 36
IM Tema 15: El TAD de las colas
  Comprobación de las implementaciones con QuickCheck
     Comprobación de las propiedades



Tema 15: El TAD de las colas

 1. Especificación del TAD de las colas

 2. Implementaciones del TAD de las colas

 3. Comprobación de las implementaciones con QuickCheck
      Librerías auxiliares
      Generador de colas
      Especificación de las propiedades de las colas
      Comprobación de las propiedades




                                                          34 / 36
IM Tema 15: El TAD de las colas
  Comprobación de las implementaciones con QuickCheck
     Comprobación de las propiedades



Definición del procedimiento de comprobación
        compruebaPropiedades comprueba todas las propiedades con la
        plataforma de verificación.

        compruebaPropiedades =
            defaultMain
                [testGroup "Propiedades del TAD cola"
                [testGroup "Propiedades del TAD cola"
                  [testProperty "P1" prop_primero_inserta_vacia,
                   testProperty "P2" prop_primero_inserta_no_vacia,
                   testProperty "P3" prop_resto_inserta_vacia,
                   testProperty "P4" prop_resto_inserta_en_no_vacia,
                   testProperty "P5" prop_vacia_es_vacia,
                   testProperty "P6" prop_inserta_no_es_vacia,
                   testProperty "P7" prop_valida_vacia,
                   testProperty "P8" prop_valida_inserta,
                   testProperty "P9" prop_valida_resto]]
                                                                       35 / 36
IM Tema 15: El TAD de las colas
  Comprobación de las implementaciones con QuickCheck
     Comprobación de las propiedades



Comprobación de las propiedades de las colas
   ghci> compruebaPropiedades
   Propiedades del TAD cola
     P1: [OK, passed 100 tests]
     P2: [OK, passed 100 tests]
     P3: [OK, passed 100 tests]
     P4: [OK, passed 100 tests]
     P5: [OK, passed 100 tests]
     P6: [OK, passed 100 tests]
     P7: [OK, passed 100 tests]
     P8: [OK, passed 100 tests]
     P9: [OK, passed 100 tests]

            Properties                 Total
     Passed 9                          9
     Failed 0                          0
     Total 9                           9
                                                        36 / 36

Más contenido relacionado

La actualidad más candente

Tecnicas de ingenieria de software
Tecnicas de ingenieria de softwareTecnicas de ingenieria de software
Tecnicas de ingenieria de software'Jorge Martinez
 
Introducción a los microcontroladores
Introducción a los microcontroladoresIntroducción a los microcontroladores
Introducción a los microcontroladoresUNEFA
 
Control de eventos en gui
Control de eventos en guiControl de eventos en gui
Control de eventos en gui
jc_lovecraft77
 
Procedimiento Para Utilizar Flex Y Bison
Procedimiento Para Utilizar Flex Y Bison Procedimiento Para Utilizar Flex Y Bison
Procedimiento Para Utilizar Flex Y Bison
Raul Hernandez Mayo
 
Alfabetos-Lenguajes y Automatas 1
Alfabetos-Lenguajes y Automatas 1Alfabetos-Lenguajes y Automatas 1
Alfabetos-Lenguajes y Automatas 1Osiris Mirerus
 
Sistemas Orientados a Objetos
Sistemas Orientados a ObjetosSistemas Orientados a Objetos
Sistemas Orientados a Objetos
Marcel Aponte
 
Estimación por puntos de función
Estimación por puntos de funciónEstimación por puntos de función
Estimación por puntos de funciónLuisa Sanchez
 
Unidad1 2 Lenguajes y automatas
Unidad1 2  Lenguajes y automatasUnidad1 2  Lenguajes y automatas
Unidad1 2 Lenguajes y automatas
Sergio Lara Guevara
 
Herramientas case snap
Herramientas case snapHerramientas case snap
Herramientas case snap
alan moreno
 
Patrones de diseño I
Patrones de diseño IPatrones de diseño I
Patrones de diseño Ikaolong
 
Generacion codigo intermedio
Generacion codigo intermedioGeneracion codigo intermedio
Generacion codigo intermedio
AndresDvila
 
puntos de funcion.pptx
puntos de funcion.pptxpuntos de funcion.pptx
puntos de funcion.pptx
Ricardo Nieva Soria
 
Planificacion del procesador
Planificacion del procesadorPlanificacion del procesador
Planificacion del procesadorManuel Ceron
 
02 Mitos de la ingeniería de software
02 Mitos de la ingeniería de software02 Mitos de la ingeniería de software
02 Mitos de la ingeniería de software
Juan Manuel Gonzalez Calleros
 
Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.Giancarlo Aguilar
 
Historia y aplicaciones de la graficacion
Historia y aplicaciones de la graficacionHistoria y aplicaciones de la graficacion
Historia y aplicaciones de la graficacionVictor Eduardo Gomez
 
Modelo dominio y secuencia
Modelo dominio y secuenciaModelo dominio y secuencia
Modelo dominio y secuenciabrayanfp
 

La actualidad más candente (20)

Tecnicas de ingenieria de software
Tecnicas de ingenieria de softwareTecnicas de ingenieria de software
Tecnicas de ingenieria de software
 
Introducción a los microcontroladores
Introducción a los microcontroladoresIntroducción a los microcontroladores
Introducción a los microcontroladores
 
Control de eventos en gui
Control de eventos en guiControl de eventos en gui
Control de eventos en gui
 
Procedimiento Para Utilizar Flex Y Bison
Procedimiento Para Utilizar Flex Y Bison Procedimiento Para Utilizar Flex Y Bison
Procedimiento Para Utilizar Flex Y Bison
 
Alfabetos-Lenguajes y Automatas 1
Alfabetos-Lenguajes y Automatas 1Alfabetos-Lenguajes y Automatas 1
Alfabetos-Lenguajes y Automatas 1
 
Sistemas Orientados a Objetos
Sistemas Orientados a ObjetosSistemas Orientados a Objetos
Sistemas Orientados a Objetos
 
Estimación por puntos de función
Estimación por puntos de funciónEstimación por puntos de función
Estimación por puntos de función
 
Unidad1 2 Lenguajes y automatas
Unidad1 2  Lenguajes y automatasUnidad1 2  Lenguajes y automatas
Unidad1 2 Lenguajes y automatas
 
Herramientas case snap
Herramientas case snapHerramientas case snap
Herramientas case snap
 
Patrones de diseño I
Patrones de diseño IPatrones de diseño I
Patrones de diseño I
 
Generacion codigo intermedio
Generacion codigo intermedioGeneracion codigo intermedio
Generacion codigo intermedio
 
Modelo v
Modelo vModelo v
Modelo v
 
puntos de funcion.pptx
puntos de funcion.pptxpuntos de funcion.pptx
puntos de funcion.pptx
 
Planificacion del procesador
Planificacion del procesadorPlanificacion del procesador
Planificacion del procesador
 
02 Mitos de la ingeniería de software
02 Mitos de la ingeniería de software02 Mitos de la ingeniería de software
02 Mitos de la ingeniería de software
 
Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.
 
Historia y aplicaciones de la graficacion
Historia y aplicaciones de la graficacionHistoria y aplicaciones de la graficacion
Historia y aplicaciones de la graficacion
 
Modelo dominio y secuencia
Modelo dominio y secuenciaModelo dominio y secuencia
Modelo dominio y secuencia
 
Diccionario De Datos
Diccionario De DatosDiccionario De Datos
Diccionario De Datos
 
7.arreglos en java
7.arreglos en  java7.arreglos en  java
7.arreglos en java
 

Destacado

I1M2010-T22: Algoritmos sobre grafos en Haskell
I1M2010-T22: Algoritmos sobre grafos en HaskellI1M2010-T22: Algoritmos sobre grafos en Haskell
I1M2010-T22: Algoritmos sobre grafos en Haskell
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
 
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
 
I1M2010-T18: El TAD de las tablas en Haskell
I1M2010-T18: El TAD de las tablas en HaskellI1M2010-T18: El TAD de las tablas en Haskell
I1M2010-T18: El TAD de las tablas en Haskell
José 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 Haskell
José 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úsqueda
José A. Alonso
 
I1M2010-T14: El tipo abstracto de datos de las pilas en Haskell
I1M2010-T14: El tipo abstracto de datos de las pilas en HaskellI1M2010-T14: El tipo abstracto de datos de las pilas en Haskell
I1M2010-T14: El tipo abstracto de datos de las pilas en Haskell
José A. Alonso
 
I1M2010-T23: Técnicas de diseño descendente de algoritmos.
I1M2010-T23: Técnicas de diseño descendente de algoritmos.I1M2010-T23: Técnicas de diseño descendente de algoritmos.
I1M2010-T23: Técnicas de diseño descendente de algoritmos.
José A. Alonso
 
DAO2011-T0: Presentación de sistemas de razonamiento automático
DAO2011-T0: Presentación de sistemas de razonamiento automáticoDAO2011-T0: Presentación de sistemas de razonamiento automático
DAO2011-T0: Presentación de sistemas de razonamiento automático
José A. Alonso
 
LMF-T5: Resolución proposicional
LMF-T5: Resolución proposicionalLMF-T5: Resolución proposicional
LMF-T5: Resolución proposicionalJosé A. Alonso
 
I1M2010-T20: El tipo abstracto de los montículos en Haskell
I1M2010-T20: El tipo abstracto de los montículos en Haskell I1M2010-T20: El tipo abstracto de los montículos en Haskell
I1M2010-T20: El tipo abstracto de los montículos en Haskell
José 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 ordenador
José 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 conjuntos
José 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
 
Tema 2: Introducción a la programación con Haskell
Tema 2: Introducción a la programación con HaskellTema 2: Introducción a la programación con Haskell
Tema 2: Introducción a la programación con Haskell
José A. Alonso
 
Panorama del razonamiento automático
Panorama del razonamiento automáticoPanorama del razonamiento automático
Panorama del razonamiento automáticoJosé 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 algoritmos
José A. Alonso
 
Tema 10: Evaluación perezosa en Haskell
Tema 10: Evaluación perezosa en HaskellTema 10: Evaluación perezosa en Haskell
Tema 10: Evaluación perezosa en Haskell
José 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 proposicional
José A. Alonso
 

Destacado (20)

I1M2010-T22: Algoritmos sobre grafos en Haskell
I1M2010-T22: Algoritmos sobre grafos en HaskellI1M2010-T22: Algoritmos sobre grafos en Haskell
I1M2010-T22: Algoritmos sobre grafos en Haskell
 
Tema 12: Analizadores sintácticos funcionales.
Tema 12: Analizadores sintácticos funcionales.Tema 12: Analizadores sintácticos funcionales.
Tema 12: Analizadores sintácticos funcionales.
 
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
 
I1M2010-T18: El TAD de las tablas en Haskell
I1M2010-T18: El TAD de las tablas en HaskellI1M2010-T18: El TAD de las tablas en Haskell
I1M2010-T18: El TAD de las tablas en Haskell
 
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
 
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
 
I1M2010-T14: El tipo abstracto de datos de las pilas en Haskell
I1M2010-T14: El tipo abstracto de datos de las pilas en HaskellI1M2010-T14: El tipo abstracto de datos de las pilas en Haskell
I1M2010-T14: El tipo abstracto de datos de las pilas en Haskell
 
I1M2010-T23: Técnicas de diseño descendente de algoritmos.
I1M2010-T23: Técnicas de diseño descendente de algoritmos.I1M2010-T23: Técnicas de diseño descendente de algoritmos.
I1M2010-T23: Técnicas de diseño descendente de algoritmos.
 
DAO2011-T0: Presentación de sistemas de razonamiento automático
DAO2011-T0: Presentación de sistemas de razonamiento automáticoDAO2011-T0: Presentación de sistemas de razonamiento automático
DAO2011-T0: Presentación de sistemas de razonamiento automático
 
LMF-T4: Formas normales
LMF-T4: Formas normalesLMF-T4: Formas normales
LMF-T4: Formas normales
 
LMF-T5: Resolución proposicional
LMF-T5: Resolución proposicionalLMF-T5: Resolución proposicional
LMF-T5: Resolución proposicional
 
I1M2010-T20: El tipo abstracto de los montículos en Haskell
I1M2010-T20: El tipo abstracto de los montículos en Haskell I1M2010-T20: El tipo abstracto de los montículos en Haskell
I1M2010-T20: El tipo abstracto de los montículos en Haskell
 
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
 
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
 
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
 
Tema 2: Introducción a la programación con Haskell
Tema 2: Introducción a la programación con HaskellTema 2: Introducción a la programación con Haskell
Tema 2: Introducción a la programación con Haskell
 
Panorama del razonamiento automático
Panorama del razonamiento automáticoPanorama del razonamiento automático
Panorama del razonamiento automático
 
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
 
Tema 10: Evaluación perezosa en Haskell
Tema 10: Evaluación perezosa en HaskellTema 10: Evaluación perezosa en Haskell
Tema 10: Evaluación perezosa 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
 

Similar a I1M2010-T15: El tipo abstracto de datos de las colas en Haskell

I1M2010-T16: El tipo abstracto de las colas de prioridad en Haskell
I1M2010-T16: El tipo abstracto de las colas de prioridad en HaskellI1M2010-T16: El tipo abstracto de las colas de prioridad en Haskell
I1M2010-T16: El tipo abstracto de las colas de prioridad en Haskell
José A. Alonso
 
Tema 2.1 -_pilas,_colas_y_listas
Tema 2.1 -_pilas,_colas_y_listasTema 2.1 -_pilas,_colas_y_listas
Tema 2.1 -_pilas,_colas_y_listas
R Nuñez
 
Pilas colas listas
Pilas colas listasPilas colas listas
Pilas colas listas
tazmania2
 
Estructura de datos
Estructura de datos Estructura de datos
Estructura de datos jarydr18
 
Cadenas mey
Cadenas meyCadenas mey
Cadenas mey
Menfy Morales
 
colasDef_1_2022.pdf
colasDef_1_2022.pdfcolasDef_1_2022.pdf
colasDef_1_2022.pdf
DanielRodriguez585633
 
Apuntes generación de codigo intermedio
Apuntes generación de codigo intermedioApuntes generación de codigo intermedio
Apuntes generación de codigo intermedio
Humano Terricola
 
Modelado y Estudio de un Sistema Dinámico de Primer Orden
Modelado y Estudio de un Sistema Dinámico de Primer OrdenModelado y Estudio de un Sistema Dinámico de Primer Orden
Modelado y Estudio de un Sistema Dinámico de Primer Orden
Angel Contreas
 

Similar a I1M2010-T15: El tipo abstracto de datos de las colas en Haskell (10)

I1M2010-T16: El tipo abstracto de las colas de prioridad en Haskell
I1M2010-T16: El tipo abstracto de las colas de prioridad en HaskellI1M2010-T16: El tipo abstracto de las colas de prioridad en Haskell
I1M2010-T16: El tipo abstracto de las colas de prioridad en Haskell
 
Tipos De Datos Abstractos Colas
Tipos De Datos Abstractos ColasTipos De Datos Abstractos Colas
Tipos De Datos Abstractos Colas
 
Colas
ColasColas
Colas
 
Tema 2.1 -_pilas,_colas_y_listas
Tema 2.1 -_pilas,_colas_y_listasTema 2.1 -_pilas,_colas_y_listas
Tema 2.1 -_pilas,_colas_y_listas
 
Pilas colas listas
Pilas colas listasPilas colas listas
Pilas colas listas
 
Estructura de datos
Estructura de datos Estructura de datos
Estructura de datos
 
Cadenas mey
Cadenas meyCadenas mey
Cadenas mey
 
colasDef_1_2022.pdf
colasDef_1_2022.pdfcolasDef_1_2022.pdf
colasDef_1_2022.pdf
 
Apuntes generación de codigo intermedio
Apuntes generación de codigo intermedioApuntes generación de codigo intermedio
Apuntes generación de codigo intermedio
 
Modelado y Estudio de un Sistema Dinámico de Primer Orden
Modelado y Estudio de un Sistema Dinámico de Primer OrdenModelado y Estudio de un Sistema Dinámico de Primer Orden
Modelado y Estudio de un Sistema Dinámico de Primer Orden
 

Más de José 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 proposicional
José 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
 
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. Aplicaciones
José 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 Haskell
José A. Alonso
 
LI2011-T11: Resolución en lógica de primer orden
LI2011-T11: Resolución en lógica de primer ordenLI2011-T11: Resolución en lógica de primer orden
LI2011-T11: Resolución en lógica de primer orden
José A. Alonso
 
LI2011-T9: Formas normales de Skolem y cláusulas
LI2011-T9: Formas normales de Skolem y cláusulasLI2011-T9: Formas normales de Skolem y cláusulas
LI2011-T9: Formas normales de Skolem y cláusulas
José A. Alonso
 
LI2011-T7: Deducción natural en lógica de primer orden
LI2011-T7: Deducción natural en lógica de primer ordenLI2011-T7: Deducción natural en lógica de primer orden
LI2011-T7: Deducción natural en lógica de primer orden
José A. Alonso
 
LIT4: Formales normales conjuntivas y disyuntivas
LIT4: Formales normales conjuntivas y disyuntivasLIT4: Formales normales conjuntivas y disyuntivas
LIT4: Formales normales conjuntivas y disyuntivas
José A. Alonso
 
LI2011-T3: Tableros semánticos proposicionales
LI2011-T3: Tableros semánticos proposicionalesLI2011-T3: Tableros semánticos proposicionales
LI2011-T3: Tableros semánticos proposicionales
José A. Alonso
 

Más de José A. Alonso (13)

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-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
 
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
 
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
 
LI2011-T11: Resolución en lógica de primer orden
LI2011-T11: Resolución en lógica de primer ordenLI2011-T11: Resolución en lógica de primer orden
LI2011-T11: Resolución en lógica de primer orden
 
LI2011-T9: Formas normales de Skolem y cláusulas
LI2011-T9: Formas normales de Skolem y cláusulasLI2011-T9: Formas normales de Skolem y cláusulas
LI2011-T9: Formas normales de Skolem y cláusulas
 
LI2011-T7: Deducción natural en lógica de primer orden
LI2011-T7: Deducción natural en lógica de primer ordenLI2011-T7: Deducción natural en lógica de primer orden
LI2011-T7: Deducción natural en lógica de primer orden
 
LIT4: Formales normales conjuntivas y disyuntivas
LIT4: Formales normales conjuntivas y disyuntivasLIT4: Formales normales conjuntivas y disyuntivas
LIT4: Formales normales conjuntivas y disyuntivas
 
LI2011-T3: Tableros semánticos proposicionales
LI2011-T3: Tableros semánticos proposicionalesLI2011-T3: Tableros semánticos proposicionales
LI2011-T3: Tableros semánticos proposicionales
 

Último

665033394-TODAS-LAS-SANGRES-resumen-Por-Capitulos.pdf
665033394-TODAS-LAS-SANGRES-resumen-Por-Capitulos.pdf665033394-TODAS-LAS-SANGRES-resumen-Por-Capitulos.pdf
665033394-TODAS-LAS-SANGRES-resumen-Por-Capitulos.pdf
valerytorresmendizab
 
Examen de Lengua Castellana y Literatura de la EBAU en Castilla-La Mancha 2024.
Examen de Lengua Castellana y Literatura de la EBAU en Castilla-La Mancha 2024.Examen de Lengua Castellana y Literatura de la EBAU en Castilla-La Mancha 2024.
Examen de Lengua Castellana y Literatura de la EBAU en Castilla-La Mancha 2024.
20minutos
 
Presentación Curso C. Diferencial - 2024-1.pdf
Presentación Curso C. Diferencial - 2024-1.pdfPresentación Curso C. Diferencial - 2024-1.pdf
Presentación Curso C. Diferencial - 2024-1.pdf
H4RV3YH3RN4ND3Z
 
recursos naturales en chile quinto básico .pptx
recursos naturales en chile quinto básico .pptxrecursos naturales en chile quinto básico .pptx
recursos naturales en chile quinto básico .pptx
Waleska Chaparro
 
Mauricio-Presentación-Vacacional- 2024-1
Mauricio-Presentación-Vacacional- 2024-1Mauricio-Presentación-Vacacional- 2024-1
Mauricio-Presentación-Vacacional- 2024-1
MauricioSnchez83
 
Power Point: El espiritismo desenmascarado
Power Point: El espiritismo desenmascaradoPower Point: El espiritismo desenmascarado
Power Point: El espiritismo desenmascarado
https://gramadal.wordpress.com/
 
Aprender-IA: Recursos online gratuitos para estar al tanto y familiarizarse c...
Aprender-IA: Recursos online gratuitos para estar al tanto y familiarizarse c...Aprender-IA: Recursos online gratuitos para estar al tanto y familiarizarse c...
Aprender-IA: Recursos online gratuitos para estar al tanto y familiarizarse c...
María Sánchez González (@cibermarikiya)
 
IMÁGENES SUBLIMINALES EN LAS PUBLICACIONES DE LOS TESTIGOS DE JEHOVÁ
IMÁGENES SUBLIMINALES EN LAS PUBLICACIONES DE LOS TESTIGOS DE JEHOVÁIMÁGENES SUBLIMINALES EN LAS PUBLICACIONES DE LOS TESTIGOS DE JEHOVÁ
IMÁGENES SUBLIMINALES EN LAS PUBLICACIONES DE LOS TESTIGOS DE JEHOVÁ
Claude LaCombe
 
Blogs_y_Educacion_Por Zaracho Lautaro_.pdf
Blogs_y_Educacion_Por Zaracho Lautaro_.pdfBlogs_y_Educacion_Por Zaracho Lautaro_.pdf
Blogs_y_Educacion_Por Zaracho Lautaro_.pdf
lautyzaracho4
 
Las diversas Sociedades Mercantiles Mexico.pdf
Las diversas Sociedades Mercantiles Mexico.pdfLas diversas Sociedades Mercantiles Mexico.pdf
Las diversas Sociedades Mercantiles Mexico.pdf
La Paradoja educativa
 
RETROALIMENTACIÓN PARA EL EXAMEN ÚNICO AUXILIAR DE ENFERMERIA.docx
RETROALIMENTACIÓN PARA EL EXAMEN ÚNICO AUXILIAR DE ENFERMERIA.docxRETROALIMENTACIÓN PARA EL EXAMEN ÚNICO AUXILIAR DE ENFERMERIA.docx
RETROALIMENTACIÓN PARA EL EXAMEN ÚNICO AUXILIAR DE ENFERMERIA.docx
100078171
 
Planificación Ejemplo con la metodología TPACK
Planificación Ejemplo con la metodología  TPACKPlanificación Ejemplo con la metodología  TPACK
Planificación Ejemplo con la metodología TPACK
ssusera6697f
 
Las Tecnologias Digitales en los Aprendizajesdel Siglo XXI UNESCO Ccesa007.pdf
Las Tecnologias Digitales en los Aprendizajesdel Siglo XXI  UNESCO Ccesa007.pdfLas Tecnologias Digitales en los Aprendizajesdel Siglo XXI  UNESCO Ccesa007.pdf
Las Tecnologias Digitales en los Aprendizajesdel Siglo XXI UNESCO Ccesa007.pdf
Demetrio Ccesa Rayme
 
Biografía de Gregor Mendel y sus 3 leyes.pptx
Biografía de Gregor Mendel y sus 3 leyes.pptxBiografía de Gregor Mendel y sus 3 leyes.pptx
Biografía de Gregor Mendel y sus 3 leyes.pptx
ar5498718
 
Triduo Eudista: Jesucristo, Sumo y Eterno Sacerdote; El Corazón de Jesús y el...
Triduo Eudista: Jesucristo, Sumo y Eterno Sacerdote; El Corazón de Jesús y el...Triduo Eudista: Jesucristo, Sumo y Eterno Sacerdote; El Corazón de Jesús y el...
Triduo Eudista: Jesucristo, Sumo y Eterno Sacerdote; El Corazón de Jesús y el...
Unidad de Espiritualidad Eudista
 
Inteligencia Artificial para Docentes HIA Ccesa007.pdf
Inteligencia Artificial para Docentes  HIA  Ccesa007.pdfInteligencia Artificial para Docentes  HIA  Ccesa007.pdf
Inteligencia Artificial para Docentes HIA Ccesa007.pdf
Demetrio Ccesa Rayme
 
FORTI-JUNIO 2024. CIENCIA, EDUCACION, CULTURA,pdf
FORTI-JUNIO 2024. CIENCIA, EDUCACION, CULTURA,pdfFORTI-JUNIO 2024. CIENCIA, EDUCACION, CULTURA,pdf
FORTI-JUNIO 2024. CIENCIA, EDUCACION, CULTURA,pdf
El Fortí
 
Examen de la EvAU 2024 en Navarra Latín.
Examen de la EvAU 2024 en Navarra Latín.Examen de la EvAU 2024 en Navarra Latín.
Examen de la EvAU 2024 en Navarra Latín.
amayaltc18
 
Lecciones 10 Esc. Sabática. El espiritismo desenmascarado docx
Lecciones 10 Esc. Sabática. El espiritismo desenmascarado docxLecciones 10 Esc. Sabática. El espiritismo desenmascarado docx
Lecciones 10 Esc. Sabática. El espiritismo desenmascarado docx
Alejandrino Halire Ccahuana
 
EVALUACION ESTUDIANTIL 2023-2024 Ecuador - Costa.pptx
EVALUACION ESTUDIANTIL 2023-2024 Ecuador - Costa.pptxEVALUACION ESTUDIANTIL 2023-2024 Ecuador - Costa.pptx
EVALUACION ESTUDIANTIL 2023-2024 Ecuador - Costa.pptx
Victor Elizalde P
 

Último (20)

665033394-TODAS-LAS-SANGRES-resumen-Por-Capitulos.pdf
665033394-TODAS-LAS-SANGRES-resumen-Por-Capitulos.pdf665033394-TODAS-LAS-SANGRES-resumen-Por-Capitulos.pdf
665033394-TODAS-LAS-SANGRES-resumen-Por-Capitulos.pdf
 
Examen de Lengua Castellana y Literatura de la EBAU en Castilla-La Mancha 2024.
Examen de Lengua Castellana y Literatura de la EBAU en Castilla-La Mancha 2024.Examen de Lengua Castellana y Literatura de la EBAU en Castilla-La Mancha 2024.
Examen de Lengua Castellana y Literatura de la EBAU en Castilla-La Mancha 2024.
 
Presentación Curso C. Diferencial - 2024-1.pdf
Presentación Curso C. Diferencial - 2024-1.pdfPresentación Curso C. Diferencial - 2024-1.pdf
Presentación Curso C. Diferencial - 2024-1.pdf
 
recursos naturales en chile quinto básico .pptx
recursos naturales en chile quinto básico .pptxrecursos naturales en chile quinto básico .pptx
recursos naturales en chile quinto básico .pptx
 
Mauricio-Presentación-Vacacional- 2024-1
Mauricio-Presentación-Vacacional- 2024-1Mauricio-Presentación-Vacacional- 2024-1
Mauricio-Presentación-Vacacional- 2024-1
 
Power Point: El espiritismo desenmascarado
Power Point: El espiritismo desenmascaradoPower Point: El espiritismo desenmascarado
Power Point: El espiritismo desenmascarado
 
Aprender-IA: Recursos online gratuitos para estar al tanto y familiarizarse c...
Aprender-IA: Recursos online gratuitos para estar al tanto y familiarizarse c...Aprender-IA: Recursos online gratuitos para estar al tanto y familiarizarse c...
Aprender-IA: Recursos online gratuitos para estar al tanto y familiarizarse c...
 
IMÁGENES SUBLIMINALES EN LAS PUBLICACIONES DE LOS TESTIGOS DE JEHOVÁ
IMÁGENES SUBLIMINALES EN LAS PUBLICACIONES DE LOS TESTIGOS DE JEHOVÁIMÁGENES SUBLIMINALES EN LAS PUBLICACIONES DE LOS TESTIGOS DE JEHOVÁ
IMÁGENES SUBLIMINALES EN LAS PUBLICACIONES DE LOS TESTIGOS DE JEHOVÁ
 
Blogs_y_Educacion_Por Zaracho Lautaro_.pdf
Blogs_y_Educacion_Por Zaracho Lautaro_.pdfBlogs_y_Educacion_Por Zaracho Lautaro_.pdf
Blogs_y_Educacion_Por Zaracho Lautaro_.pdf
 
Las diversas Sociedades Mercantiles Mexico.pdf
Las diversas Sociedades Mercantiles Mexico.pdfLas diversas Sociedades Mercantiles Mexico.pdf
Las diversas Sociedades Mercantiles Mexico.pdf
 
RETROALIMENTACIÓN PARA EL EXAMEN ÚNICO AUXILIAR DE ENFERMERIA.docx
RETROALIMENTACIÓN PARA EL EXAMEN ÚNICO AUXILIAR DE ENFERMERIA.docxRETROALIMENTACIÓN PARA EL EXAMEN ÚNICO AUXILIAR DE ENFERMERIA.docx
RETROALIMENTACIÓN PARA EL EXAMEN ÚNICO AUXILIAR DE ENFERMERIA.docx
 
Planificación Ejemplo con la metodología TPACK
Planificación Ejemplo con la metodología  TPACKPlanificación Ejemplo con la metodología  TPACK
Planificación Ejemplo con la metodología TPACK
 
Las Tecnologias Digitales en los Aprendizajesdel Siglo XXI UNESCO Ccesa007.pdf
Las Tecnologias Digitales en los Aprendizajesdel Siglo XXI  UNESCO Ccesa007.pdfLas Tecnologias Digitales en los Aprendizajesdel Siglo XXI  UNESCO Ccesa007.pdf
Las Tecnologias Digitales en los Aprendizajesdel Siglo XXI UNESCO Ccesa007.pdf
 
Biografía de Gregor Mendel y sus 3 leyes.pptx
Biografía de Gregor Mendel y sus 3 leyes.pptxBiografía de Gregor Mendel y sus 3 leyes.pptx
Biografía de Gregor Mendel y sus 3 leyes.pptx
 
Triduo Eudista: Jesucristo, Sumo y Eterno Sacerdote; El Corazón de Jesús y el...
Triduo Eudista: Jesucristo, Sumo y Eterno Sacerdote; El Corazón de Jesús y el...Triduo Eudista: Jesucristo, Sumo y Eterno Sacerdote; El Corazón de Jesús y el...
Triduo Eudista: Jesucristo, Sumo y Eterno Sacerdote; El Corazón de Jesús y el...
 
Inteligencia Artificial para Docentes HIA Ccesa007.pdf
Inteligencia Artificial para Docentes  HIA  Ccesa007.pdfInteligencia Artificial para Docentes  HIA  Ccesa007.pdf
Inteligencia Artificial para Docentes HIA Ccesa007.pdf
 
FORTI-JUNIO 2024. CIENCIA, EDUCACION, CULTURA,pdf
FORTI-JUNIO 2024. CIENCIA, EDUCACION, CULTURA,pdfFORTI-JUNIO 2024. CIENCIA, EDUCACION, CULTURA,pdf
FORTI-JUNIO 2024. CIENCIA, EDUCACION, CULTURA,pdf
 
Examen de la EvAU 2024 en Navarra Latín.
Examen de la EvAU 2024 en Navarra Latín.Examen de la EvAU 2024 en Navarra Latín.
Examen de la EvAU 2024 en Navarra Latín.
 
Lecciones 10 Esc. Sabática. El espiritismo desenmascarado docx
Lecciones 10 Esc. Sabática. El espiritismo desenmascarado docxLecciones 10 Esc. Sabática. El espiritismo desenmascarado docx
Lecciones 10 Esc. Sabática. El espiritismo desenmascarado docx
 
EVALUACION ESTUDIANTIL 2023-2024 Ecuador - Costa.pptx
EVALUACION ESTUDIANTIL 2023-2024 Ecuador - Costa.pptxEVALUACION ESTUDIANTIL 2023-2024 Ecuador - Costa.pptx
EVALUACION ESTUDIANTIL 2023-2024 Ecuador - Costa.pptx
 

I1M2010-T15: El tipo abstracto de datos de las colas en Haskell

  • 1. Tema 15: El TAD de las colas 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 15: El TAD de las colas Tema 15: El TAD de las colas 1. Especificación del TAD de las colas Signatura del TAD de las colas Propiedades del TAD de las colas 2. Implementaciones del TAD de las colas Implementación de las colas mediante listas Implementación de las colas mediante pares de listas 3. Comprobación de las implementaciones con QuickCheck Librerías auxiliares Generador de colas Especificación de las propiedades de las colas Comprobación de las propiedades 2 / 36
  • 3. IM Tema 15: El TAD de las colas Especificación del TAD de las colas Signatura del TAD de las colas Tema 15: El TAD de las colas 1. Especificación del TAD de las colas Signatura del TAD de las colas Propiedades del TAD de las colas 2. Implementaciones del TAD de las colas 3. Comprobación de las implementaciones con QuickCheck 3 / 36
  • 4. IM Tema 15: El TAD de las colas Especificación del TAD de las colas Signatura del TAD de las colas Descripción informal de las colas Una cola es una estructura de datos, caracterizada por ser una secuencia de elementos en la que la operación de inserción se realiza por un extremo (el posterior o final) y la operación de extracción por el otro (el anterior o frente). Las colas también se llaman estructuras FIFO (del inglés First In First Out), debido a que el primer elemento en entrar será también el primero en salir. Analogía con las colas del cine. 4 / 36
  • 5. IM Tema 15: El TAD de las colas Especificación del TAD de las colas Signatura del TAD de las colas Signatura del TAD colas Signatura: vacia :: Cola a inserta :: a -> Cola a -> Cola a primero :: Cola a -> a resto :: Cola a -> Cola a esVacia :: Cola a -> Bool valida :: Cola a -> Bool Descripción de las operaciones: vacia es la cola vacía. (inserta x c) es la cola obtenida añadiendo x al final de c. (primero c) es el primero de la cola c. (resto c) es la cola obtenida eliminando el primero de c. (esVacia c) se verifica si c es la cola vacía. (valida c) se verifica si c representa una cola válida. 5 / 36
  • 6. IM Tema 15: El TAD de las colas Especificación del TAD de las colas Propiedades del TAD de las colas Tema 15: El TAD de las colas 1. Especificación del TAD de las colas Signatura del TAD de las colas Propiedades del TAD de las colas 2. Implementaciones del TAD de las colas 3. Comprobación de las implementaciones con QuickCheck 6 / 36
  • 7. IM Tema 15: El TAD de las colas Especificación del TAD de las colas Propiedades del TAD de las colas Propiedades del TAD de las colas 1. primero (inserta x vacia) == x 2. Si c es una cola no vacía, entonces primero (inserta x c) == primero c, 3. resto (inserta x vacia) == vacia 4. Si c es una cola no vacía, entonces resto (inserta x c) == inserta x (resto c) 5. esVacia vacia 6. not (esVacia (inserta x c)) 7 / 36
  • 8. IM Tema 15: El TAD de las colas Implementaciones del TAD de las colas Implementación de las colas mediante listas Tema 15: El TAD de las colas 1. Especificación del TAD de las colas 2. Implementaciones del TAD de las colas Implementación de las colas mediante listas Implementación de las colas mediante pares de listas 3. Comprobación de las implementaciones con QuickCheck 8 / 36
  • 9. IM Tema 15: El TAD de las colas Implementaciones del TAD de las colas Implementación de las colas mediante listas Implementación de las colas mediante listas Cabecera del módulo: module ColaConListas (Cola, vacia, -- Cola a inserta, -- a -> Cola a -> Cola a primero, -- Cola a -> a resto, -- Cola a -> Cola a esVacia, -- Cola a -> Bool valida -- Cola a -> Bool ) where Representación de las colas mediante listas: newtype Cola a = C [a] deriving (Show, Eq) 9 / 36
  • 10. IM Tema 15: El TAD de las colas Implementaciones del TAD de las colas Implementación de las colas mediante listas Implementación de las colas mediante listas Ejemplo de cola: c1 es la cola obtenida añadiéndole a la cola vacía los números del 1 al 10. Por ejemplo, ghci> c1 C [10,9,8,7,6,5,4,3,2,1] c1 = foldr inserta vacia [1..10] vacia es la cola vacía. Por ejemplo, ghci> vacia C [] vacia :: Cola a vacia = C [] 10 / 36
  • 11. IM Tema 15: El TAD de las colas Implementaciones del TAD de las colas Implementación de las colas mediante listas Implementación de las colas mediante listas (inserta x c) es la cola obtenida añadiendo x al final de la cola c. Por ejemplo, inserta 12 c1 C [10,9,8,7,6,5,4,3,2,1,12] inserta :: a -> Cola a -> Cola a inserta x (C c) = C (c ++ [x]) (primero c) es el primer elemento de la cola c. Por ejemplo, primero c1 10 primero :: Cola a -> a primero (C (x:_)) = x primero (C []) = error "primero: cola vacia" 11 / 36
  • 12. IM Tema 15: El TAD de las colas Implementaciones del TAD de las colas Implementación de las colas mediante listas Implementación de las colas mediante listas (resto c) es la cola obtenida eliminando el primer elemento de la cola c. Por ejemplo, resto c1 C [9,8,7,6,5,4,3,2,1] resto :: Cola a -> Cola a resto (C (_:xs)) = C xs resto (C []) = error "resto: cola vacia" (esVacia c) se verifica si c es la cola vacía. Por ejemplo, esVacia c1 False esVacia vacia True esVacia :: Cola a -> Bool esVacia (C xs) = null xs 12 / 36
  • 13. IM Tema 15: El TAD de las colas Implementaciones del TAD de las colas Implementación de las colas mediante listas Implementación de las colas mediante listas (valida c) se verifica si c representa una cola válida. Con esta representación, todas las colas son válidas. valida :: Cola a -> Bool valida c = True 13 / 36
  • 14. IM Tema 15: El TAD de las colas Implementaciones del TAD de las colas Implementación de las colas mediante pares de listas Tema 15: El TAD de las colas 1. Especificación del TAD de las colas 2. Implementaciones del TAD de las colas Implementación de las colas mediante listas Implementación de las colas mediante pares de listas 3. Comprobación de las implementaciones con QuickCheck 14 / 36
  • 15. IM Tema 15: El TAD de las colas Implementaciones del TAD de las colas Implementación de las colas mediante pares de listas Las colas como pares de listas En esta implementación, una cola c se representa mediante un par de listas (xs,ys) de modo que los elementos de c son, en ese orden, los elementos de la lista xs++(reverse ys). Al dividir la lista en dos parte e invertir la segunda de ellas, esperamos hacer más eficiente las operaciones sobre las colas. Impondremos también una restricción adicional sobre la representación: las colas serán representadas mediante pares (xs,ys) tales que si xs es vacía, entonces ys será también vacía. Esta restricción ha de mantenerse por las operaciones que crean colas. 15 / 36
  • 16. IM Tema 15: El TAD de las colas Implementaciones del TAD de las colas Implementación de las colas mediante pares de listas Implementación de las colas como pares de listas Cabecera del módulo module ColaConDosListas (Cola, vacia, -- Cola a inserta, -- a -> Cola a -> Cola a primero, -- Cola a -> a resto, -- Cola a -> Cola a esVacia, -- Cola a -> Bool valida -- Cola a -> Bool ) where Las colas como pares de listas newtype Cola a = C ([a],[a]) 16 / 36
  • 17. IM Tema 15: El TAD de las colas Implementaciones del TAD de las colas Implementación de las colas mediante pares de listas Implementación de las colas como pares de listas (valida c) se verifica si la cola c es válida; es decir, si su primer elemento es vacío entonces también lo es el segundo. Por ejemplo, valida (C ([2],[5])) True valida (C ([2],[])) True valida (C ([],[5])) False valida:: Cola a -> Bool valida (C (xs,ys)) = not (null xs) || null ys 17 / 36
  • 18. IM Tema 15: El TAD de las colas Implementaciones del TAD de las colas Implementación de las colas mediante pares de listas Implementación de las colas como pares de listas Procedimiento de escritura de colas como pares de listas. instance Show a => Show (Cola a) where showsPrec p (C (xs,ys)) cad = showString "C " (showList (xs ++ (reverse ys)) c Ejemplo de cola: c1 es la cola obtenida añadiéndole a la cola vacía los números del 1 al 10. Por ejemplo, ghci> c1 C [10,9,8,7,6,5,4,3,2,1] c1 :: Cola Int c1 = foldr inserta vacia [1..10] 18 / 36
  • 19. IM Tema 15: El TAD de las colas Implementaciones del TAD de las colas Implementación de las colas mediante pares de listas Implementación de las colas como pares de listas vacia es la cola vacía. Por ejemplo, ghci> c1 C [10,9,8,7,6,5,4,3,2,1] vacia :: Cola a vacia = C ([],[]) (inserta x c) es la cola obtenida añadiendo x al final de la cola c. Por ejemplo, inserta 12 c1 C [10,9,8,7,6,5,4,3,2,1,12] inserta :: a -> Cola a -> Cola a inserta y (C (xs,ys)) = C (normaliza (xs,y:ys)) 19 / 36
  • 20. IM Tema 15: El TAD de las colas Implementaciones del TAD de las colas Implementación de las colas mediante pares de listas Implementación de las colas como pares de listas (normaliza p) es la cola obtenida al normalizar el par de listas p. Por ejemplo, normaliza ([],[2,5,3]) ([3,5,2],[]) normaliza ([4],[2,5,3]) ([4],[2,5,3]) normaliza :: ([a],[a]) -> ([a],[a]) normaliza ([], ys) = (reverse ys, []) normaliza p = p (primero c) es el primer elemento de la cola c. Por ejemplo, primero c1 10 primero :: Cola a -> a primero (C (x:xs,ys)) = x primero _ = error "primero: cola vacia" 20 / 36
  • 21. IM Tema 15: El TAD de las colas Implementaciones del TAD de las colas Implementación de las colas mediante pares de listas Implementación de las colas como pares de listas (resto c) es la cola obtenida eliminando el primer elemento de la cola c. Por ejemplo, resto c1 C [9,8,7,6,5,4,3,2,1] resto :: Cola a -> Cola a resto (C (x:xs,ys)) = C (normaliza (xs,ys)) resto (C ([],[])) = error "resto: cola vacia" (esVacia c) se verifica si c es la cola vacía. Por ejemplo, esVacia c1 False esVacia vacia True esVacia :: Cola a -> Bool esVacia (C (xs,_)) = null xs 21 / 36
  • 22. IM Tema 15: El TAD de las colas Implementaciones del TAD de las colas Implementación de las colas mediante pares de listas Implementación de las colas como pares de listas (elementos c) es la lista de los elementos de la cola c en el orden de la cola. Por ejemplo, elementos (C ([3,2],[5,4,7])) [3,2,7,4,5] elementos:: Cola a -> [a] elementos (C (xs,ys)) = xs ++ (reverse ys) 22 / 36
  • 23. IM Tema 15: El TAD de las colas Implementaciones del TAD de las colas Implementación de las colas mediante pares de listas Implementación de las colas como pares de listas (igualColas c1 c2) se verifica si las colas c1 y c2 son iguales. ghci> igualColas (C ([3,2],[5,4,7])) (C ([3],[5,4,7,2])) True ghci> igualColas (C ([3,2],[5,4,7])) (C ([],[5,4,7,2,3])) False igualColas c1 c2 = valida c1 && valida c2 && elementos c1 == elementos c2 Extensión de la igualdad a las colas: instance (Eq a) => Eq (Cola a) where (==) = igualColas 23 / 36
  • 24. IM Tema 15: El TAD de las colas Comprobación de las implementaciones con QuickCheck Librerías auxiliares Tema 15: El TAD de las colas 1. Especificación del TAD de las colas 2. Implementaciones del TAD de las colas 3. Comprobación de las implementaciones con QuickCheck Librerías auxiliares Generador de colas Especificación de las propiedades de las colas Comprobación de las propiedades 24 / 36
  • 25. IM Tema 15: El TAD de las colas Comprobación de las implementaciones con QuickCheck Librerías auxiliares Importación de librerías Importación de la implementación de las colas que se desea comprobar. import ColaConListas -- import ColaConDosListas Importación de librerías auxiliares import Data.List import Test.QuickCheck import Test.Framework import Test.Framework.Providers.QuickCheck2 25 / 36
  • 26. IM Tema 15: El TAD de las colas Comprobación de las implementaciones con QuickCheck Generador de colas Tema 15: El TAD de las colas 1. Especificación del TAD de las colas 2. Implementaciones del TAD de las colas 3. Comprobación de las implementaciones con QuickCheck Librerías auxiliares Generador de colas Especificación de las propiedades de las colas Comprobación de las propiedades 26 / 36
  • 27. IM Tema 15: El TAD de las colas Comprobación de las implementaciones con QuickCheck Generador de colas Generador de colas genCola es un generador de colas de enteros. Por ejemplo, ghci> sample genCola C ([7,8,4,3,7],[5,3,3]) C ([1],[13]) ... genCola :: Gen (Cola Int) genCola = frequency [(1, return vacia), (30, do n <- choose (10,100) xs <- vectorOf n arbitrary return (creaCola xs))] where creaCola = foldr inserta vacia instance Arbitrary (Cola Int) where arbitrary = genCola 27 / 36
  • 28. IM Tema 15: El TAD de las colas Comprobación de las implementaciones con QuickCheck Generador de colas Corrección del generador de colas Propiedad: Todo los elementos generados por genCola son colas válidas. prop_genCola_correcto :: Cola Int -> Bool prop_genCola_correcto c = valida c Comprobación. ghci> quickCheck prop_genCola_correcto +++ OK, passed 100 tests. 28 / 36
  • 29. IM Tema 15: El TAD de las colas Comprobación de las implementaciones con QuickCheck Especificación de las propiedades de las colas Tema 15: El TAD de las colas 1. Especificación del TAD de las colas 2. Implementaciones del TAD de las colas 3. Comprobación de las implementaciones con QuickCheck Librerías auxiliares Generador de colas Especificación de las propiedades de las colas Comprobación de las propiedades 29 / 36
  • 30. IM Tema 15: El TAD de las colas Comprobación de las implementaciones con QuickCheck Especificación de las propiedades de las colas Especificación de las propiedades de las colas El primero de la cola obtenida añadiendo x a la cola vacía es x. prop_primero_inserta_vacia :: Int -> Bool prop_primero_inserta_vacia x = primero (inserta x vacia) == x Si una cola no está vacía, su primer elemento no varía al añadirle un elemento. prop_primero_inserta_no_vacia :: Cola Int -> Int -> Int -> Bool prop_primero_inserta_no_vacia c x y = primero (inserta x c') == primero c' where c' = inserta y vacia 30 / 36
  • 31. IM Tema 15: El TAD de las colas Comprobación de las implementaciones con QuickCheck Especificación de las propiedades de las colas Especificación de las propiedades de las colas El resto de la cola obtenida insertando un elemento en la cola vacía es la cola vacía. prop_resto_inserta_vacia :: Int -> Bool prop_resto_inserta_vacia x = resto (inserta x vacia) == vacia Las operaciones de encolar y desencolar conmutan. prop_resto_inserta_en_no_vacia :: Cola Int -> Int -> Int -> Bool prop_resto_inserta_en_no_vacia c x y = resto (inserta x c') == inserta x (resto c') where c' = inserta y c 31 / 36
  • 32. IM Tema 15: El TAD de las colas Comprobación de las implementaciones con QuickCheck Especificación de las propiedades de las colas Especificación de las propiedades de las colas vacia es una cola vacía. prop_vacia_es_vacia :: Bool prop_vacia_es_vacia = esVacia vacia La cola obtenida insertando un elemento no es vacía. prop_inserta_no_es_vacia :: Int -> Cola Int -> Bool prop_inserta_no_es_vacia x c = not (esVacia (inserta x c)) 32 / 36
  • 33. IM Tema 15: El TAD de las colas Comprobación de las implementaciones con QuickCheck Especificación de las propiedades de las colas Especificación de las propiedades de las colas La cola vacía es válida. prop_valida_vacia :: Bool prop_valida_vacia = valida vacia Al añadirle un elemento a una cola válida se obtiene otra válida. prop_valida_inserta :: Cola Int -> Int -> Property prop_valida_inserta c x = valida c ==> valida (inserta x c) El resto de una cola válida y no vacía es una cola válida. prop_valida_resto :: Cola Int -> Property prop_valida_resto c = valida c && not (esVacia c) ==> valida (resto c) 33 / 36
  • 34. IM Tema 15: El TAD de las colas Comprobación de las implementaciones con QuickCheck Comprobación de las propiedades Tema 15: El TAD de las colas 1. Especificación del TAD de las colas 2. Implementaciones del TAD de las colas 3. Comprobación de las implementaciones con QuickCheck Librerías auxiliares Generador de colas Especificación de las propiedades de las colas Comprobación de las propiedades 34 / 36
  • 35. IM Tema 15: El TAD de las colas Comprobación de las implementaciones con QuickCheck Comprobación de las propiedades Definición del procedimiento de comprobación compruebaPropiedades comprueba todas las propiedades con la plataforma de verificación. compruebaPropiedades = defaultMain [testGroup "Propiedades del TAD cola" [testGroup "Propiedades del TAD cola" [testProperty "P1" prop_primero_inserta_vacia, testProperty "P2" prop_primero_inserta_no_vacia, testProperty "P3" prop_resto_inserta_vacia, testProperty "P4" prop_resto_inserta_en_no_vacia, testProperty "P5" prop_vacia_es_vacia, testProperty "P6" prop_inserta_no_es_vacia, testProperty "P7" prop_valida_vacia, testProperty "P8" prop_valida_inserta, testProperty "P9" prop_valida_resto]] 35 / 36
  • 36. IM Tema 15: El TAD de las colas Comprobación de las implementaciones con QuickCheck Comprobación de las propiedades Comprobación de las propiedades de las colas ghci> compruebaPropiedades Propiedades del TAD cola P1: [OK, passed 100 tests] P2: [OK, passed 100 tests] P3: [OK, passed 100 tests] P4: [OK, passed 100 tests] P5: [OK, passed 100 tests] P6: [OK, passed 100 tests] P7: [OK, passed 100 tests] P8: [OK, passed 100 tests] P9: [OK, passed 100 tests] Properties Total Passed 9 9 Failed 0 0 Total 9 9 36 / 36