SlideShare une entreprise Scribd logo
1  sur  36
Télécharger pour lire hors ligne
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

Contenu connexe

En vedette

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 HaskellJosé 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
 
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
 
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 HaskellJosé 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áticoJosé 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 ordenadorJosé 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
 
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 HaskellJosé 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 algoritmosJosé 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 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
 
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 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
 

En vedette (20)

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
 
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
 
LI-T5b: Algoritmos para SAT. Aplicaciones
LI-T5b: Algoritmos para SAT. AplicacionesLI-T5b: Algoritmos para SAT. Aplicaciones
LI-T5b: Algoritmos para SAT. Aplicaciones
 

Similaire à 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 HaskellJosé 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_listasR Nuñez
 
Pilas colas listas
Pilas colas listasPilas colas listas
Pilas colas listastazmania2
 
Estructura de datos
Estructura de datos Estructura de datos
Estructura de datos jarydr18
 
Apuntes generación de codigo intermedio
Apuntes generación de codigo intermedioApuntes generación de codigo intermedio
Apuntes generación de codigo intermedioHumano 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 OrdenAngel Contreas
 

Similaire à 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
 

Plus 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 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
 
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 -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
 
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 ordenJosé 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áusulasJosé A. Alonso
 
LIT4: Formales normales conjuntivas y disyuntivas
LIT4: Formales normales conjuntivas y disyuntivasLIT4: Formales normales conjuntivas y disyuntivas
LIT4: Formales normales conjuntivas y disyuntivasJosé A. Alonso
 
LI2011-T3: Tableros semánticos proposicionales
LI2011-T3: Tableros semánticos proposicionalesLI2011-T3: Tableros semánticos proposicionales
LI2011-T3: Tableros semánticos proposicionalesJosé A. Alonso
 

Plus de José A. Alonso (11)

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

Dernier

Cuadernillo de actividades eclipse solar.pdf
Cuadernillo de actividades eclipse solar.pdfCuadernillo de actividades eclipse solar.pdf
Cuadernillo de actividades eclipse solar.pdflizcortes48
 
DIGNITAS INFINITA - DIGNIDAD HUMANA; Declaración del dicasterio para la doctr...
DIGNITAS INFINITA - DIGNIDAD HUMANA; Declaración del dicasterio para la doctr...DIGNITAS INFINITA - DIGNIDAD HUMANA; Declaración del dicasterio para la doctr...
DIGNITAS INFINITA - DIGNIDAD HUMANA; Declaración del dicasterio para la doctr...Martin M Flynn
 
Presentación Bloque 3 Actividad 2 transversal.pptx
Presentación Bloque 3 Actividad 2 transversal.pptxPresentación Bloque 3 Actividad 2 transversal.pptx
Presentación Bloque 3 Actividad 2 transversal.pptxRosabel UA
 
PROGRAMACIÓN CURRICULAR - DPCC- 5°-2024.pdf
PROGRAMACIÓN CURRICULAR - DPCC- 5°-2024.pdfPROGRAMACIÓN CURRICULAR - DPCC- 5°-2024.pdf
PROGRAMACIÓN CURRICULAR - DPCC- 5°-2024.pdfMaritza438836
 
Fichas de Matemática TERCERO DE SECUNDARIA.pdf
Fichas de Matemática TERCERO DE SECUNDARIA.pdfFichas de Matemática TERCERO DE SECUNDARIA.pdf
Fichas de Matemática TERCERO DE SECUNDARIA.pdfssuser50d1252
 
PPT_ Prefijo homo tema para trabajar los prefijos en razonamiento verbal
PPT_ Prefijo homo tema para trabajar los prefijos en razonamiento verbalPPT_ Prefijo homo tema para trabajar los prefijos en razonamiento verbal
PPT_ Prefijo homo tema para trabajar los prefijos en razonamiento verbalRosarioChoque3
 
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...YobanaZevallosSantil1
 
Si cuidamos el mundo, tendremos un mundo mejor.
Si cuidamos el mundo, tendremos un mundo mejor.Si cuidamos el mundo, tendremos un mundo mejor.
Si cuidamos el mundo, tendremos un mundo mejor.monthuerta17
 
HISTORIETA: AVENTURAS VERDES (ECOLOGÍA).
HISTORIETA: AVENTURAS VERDES (ECOLOGÍA).HISTORIETA: AVENTURAS VERDES (ECOLOGÍA).
HISTORIETA: AVENTURAS VERDES (ECOLOGÍA).hebegris04
 
Acuerdo 05_04_24 Lineamientos del CTE.pdf
Acuerdo 05_04_24 Lineamientos del CTE.pdfAcuerdo 05_04_24 Lineamientos del CTE.pdf
Acuerdo 05_04_24 Lineamientos del CTE.pdfmiriamguevara21
 
Fichas de matemática DE PRIMERO DE SECUNDARIA.pdf
Fichas de matemática DE PRIMERO DE SECUNDARIA.pdfFichas de matemática DE PRIMERO DE SECUNDARIA.pdf
Fichas de matemática DE PRIMERO DE SECUNDARIA.pdfssuser50d1252
 
DIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJO
DIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJODIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJO
DIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJOLeninCariMogrovejo
 
EJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docx
EJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docxEJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docx
EJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docxFabianValenciaJabo
 
4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE 9-4-24 (1).docx
4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE     9-4-24 (1).docx4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE     9-4-24 (1).docx
4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE 9-4-24 (1).docxMagalyDacostaPea
 
Actividad transversal 2-bloque 2. Actualización 2024
Actividad transversal 2-bloque 2. Actualización 2024Actividad transversal 2-bloque 2. Actualización 2024
Actividad transversal 2-bloque 2. Actualización 2024Rosabel UA
 
SESIÓN DE APRENDIZAJE Leemos un texto para identificar los sinónimos y los an...
SESIÓN DE APRENDIZAJE Leemos un texto para identificar los sinónimos y los an...SESIÓN DE APRENDIZAJE Leemos un texto para identificar los sinónimos y los an...
SESIÓN DE APRENDIZAJE Leemos un texto para identificar los sinónimos y los an...GIANCARLOORDINOLAORD
 
Actividades eclipse solar 2024 Educacion
Actividades eclipse solar 2024 EducacionActividades eclipse solar 2024 Educacion
Actividades eclipse solar 2024 Educacionviviantorres91
 

Dernier (20)

Cuadernillo de actividades eclipse solar.pdf
Cuadernillo de actividades eclipse solar.pdfCuadernillo de actividades eclipse solar.pdf
Cuadernillo de actividades eclipse solar.pdf
 
DIGNITAS INFINITA - DIGNIDAD HUMANA; Declaración del dicasterio para la doctr...
DIGNITAS INFINITA - DIGNIDAD HUMANA; Declaración del dicasterio para la doctr...DIGNITAS INFINITA - DIGNIDAD HUMANA; Declaración del dicasterio para la doctr...
DIGNITAS INFINITA - DIGNIDAD HUMANA; Declaración del dicasterio para la doctr...
 
Unidad 2 | Teorías de la Comunicación | MCDIU
Unidad 2 | Teorías de la Comunicación | MCDIUUnidad 2 | Teorías de la Comunicación | MCDIU
Unidad 2 | Teorías de la Comunicación | MCDIU
 
Sesión ¿Amor o egoísmo? Esa es la cuestión
Sesión  ¿Amor o egoísmo? Esa es la cuestiónSesión  ¿Amor o egoísmo? Esa es la cuestión
Sesión ¿Amor o egoísmo? Esa es la cuestión
 
Presentación Bloque 3 Actividad 2 transversal.pptx
Presentación Bloque 3 Actividad 2 transversal.pptxPresentación Bloque 3 Actividad 2 transversal.pptx
Presentación Bloque 3 Actividad 2 transversal.pptx
 
PROGRAMACIÓN CURRICULAR - DPCC- 5°-2024.pdf
PROGRAMACIÓN CURRICULAR - DPCC- 5°-2024.pdfPROGRAMACIÓN CURRICULAR - DPCC- 5°-2024.pdf
PROGRAMACIÓN CURRICULAR - DPCC- 5°-2024.pdf
 
Fichas de Matemática TERCERO DE SECUNDARIA.pdf
Fichas de Matemática TERCERO DE SECUNDARIA.pdfFichas de Matemática TERCERO DE SECUNDARIA.pdf
Fichas de Matemática TERCERO DE SECUNDARIA.pdf
 
PPT_ Prefijo homo tema para trabajar los prefijos en razonamiento verbal
PPT_ Prefijo homo tema para trabajar los prefijos en razonamiento verbalPPT_ Prefijo homo tema para trabajar los prefijos en razonamiento verbal
PPT_ Prefijo homo tema para trabajar los prefijos en razonamiento verbal
 
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...
 
Si cuidamos el mundo, tendremos un mundo mejor.
Si cuidamos el mundo, tendremos un mundo mejor.Si cuidamos el mundo, tendremos un mundo mejor.
Si cuidamos el mundo, tendremos un mundo mejor.
 
HISTORIETA: AVENTURAS VERDES (ECOLOGÍA).
HISTORIETA: AVENTURAS VERDES (ECOLOGÍA).HISTORIETA: AVENTURAS VERDES (ECOLOGÍA).
HISTORIETA: AVENTURAS VERDES (ECOLOGÍA).
 
Acuerdo 05_04_24 Lineamientos del CTE.pdf
Acuerdo 05_04_24 Lineamientos del CTE.pdfAcuerdo 05_04_24 Lineamientos del CTE.pdf
Acuerdo 05_04_24 Lineamientos del CTE.pdf
 
¿Amor o egoísmo? Esa es la cuestión.pptx
¿Amor o egoísmo? Esa es la cuestión.pptx¿Amor o egoísmo? Esa es la cuestión.pptx
¿Amor o egoísmo? Esa es la cuestión.pptx
 
Fichas de matemática DE PRIMERO DE SECUNDARIA.pdf
Fichas de matemática DE PRIMERO DE SECUNDARIA.pdfFichas de matemática DE PRIMERO DE SECUNDARIA.pdf
Fichas de matemática DE PRIMERO DE SECUNDARIA.pdf
 
DIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJO
DIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJODIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJO
DIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJO
 
EJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docx
EJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docxEJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docx
EJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docx
 
4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE 9-4-24 (1).docx
4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE     9-4-24 (1).docx4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE     9-4-24 (1).docx
4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE 9-4-24 (1).docx
 
Actividad transversal 2-bloque 2. Actualización 2024
Actividad transversal 2-bloque 2. Actualización 2024Actividad transversal 2-bloque 2. Actualización 2024
Actividad transversal 2-bloque 2. Actualización 2024
 
SESIÓN DE APRENDIZAJE Leemos un texto para identificar los sinónimos y los an...
SESIÓN DE APRENDIZAJE Leemos un texto para identificar los sinónimos y los an...SESIÓN DE APRENDIZAJE Leemos un texto para identificar los sinónimos y los an...
SESIÓN DE APRENDIZAJE Leemos un texto para identificar los sinónimos y los an...
 
Actividades eclipse solar 2024 Educacion
Actividades eclipse solar 2024 EducacionActividades eclipse solar 2024 Educacion
Actividades eclipse solar 2024 Educacion
 

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