SlideShare uma empresa Scribd logo
1 de 28
Baixar para ler offline
Tema 16: El TAD de las colas de prioridad
               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 16: El TAD de las colas de prioridad




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

  2. Implementaciones del TAD de las colas de prioridad
        Las colas de prioridad como listas
        Las colas de prioridad como montículos

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

                                                                    2 / 28
IM Tema 16: El TAD de las colas de prioridad
  Especificación del TAD de las colas de prioridad
     Signatura del TAD colas de prioridad



Tema 16: El TAD de las colas de prioridad

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

  2. Implementaciones del TAD de las colas de prioridad

  3. Comprobación de las implementaciones con QuickCheck




                                                           3 / 28
IM Tema 16: El TAD de las colas de prioridad
  Especificación del TAD de las colas de prioridad
     Signatura del TAD colas de prioridad



Descripción de las colas de prioridad
         Una cola de prioridad es una cola en la que cada elemento tiene
         asociada una prioridad. La operación de extracción siempre elige
         el elemento de menor prioridad.
         Ejemplo: La cola de las ciudades ordenadas por su distancia al
         destino final.




                                                                            4 / 28
IM Tema 16: El TAD de las colas de prioridad
  Especificación del TAD de las colas de prioridad
     Signatura del TAD colas de prioridad



Signatura de las colas de prioridad
         Signatura:
          vacia, ::                 Ord a => CPrioridad a
          inserta, ::               Ord a => a -> CPrioridad   a -> CPrioridad a
          primero, ::               Ord a => CPrioridad a ->   a
          resto, ::                 Ord a => CPrioridad a ->   CPrioridad a
          esVacia, ::               Ord a => CPrioridad a ->   Bool
          valida ::                 Ord a => CPrioridad a ->   Bool
         Descripción de            las operaciones:
                 vacia es la cola de prioridad vacía.
                 (inserta x c) añade el elemento x a la cola de prioridad c.
                 (primero c) es el primer elemento de la cola de prioridad c.
                 (resto c) es el resto de la cola de prioridad c.
                 (esVacia c) se verifica si la cola de prioridad c es vacía.
                 (valida c) se verifica si c es una cola de prioridad válida.

                                                                                   5 / 28
IM Tema 16: El TAD de las colas de prioridad
  Especificación del TAD de las colas de prioridad
     Propiedades del TAD de las colas de prioridad



Tema 16: El TAD de las colas de prioridad

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

  2. Implementaciones del TAD de las colas de prioridad

  3. Comprobación de las implementaciones con QuickCheck




                                                           6 / 28
IM Tema 16: El TAD de las colas de prioridad
  Especificación del TAD de las colas de prioridad
     Propiedades del TAD de las colas de prioridad



Propiedades del TAD de las colas de prioridad
    1. inserta x (inserta y c) == inserta y (inserta x c)
    2. primero (inserta x vacia) == x
    3. Si x <= y, entonces
       primero (inserta y (inserta x c))
       == primero (inserta x c)
    4. resto (inserta x vacia) == vacia
    5. Si x <= y, entonces
       resto (inserta y (inserta x c))
       == inserta y (resto (inserta x c))
    6. esVacia vacia
    7. not (esVacia (inserta x c))


                                                            7 / 28
IM Tema 16: El TAD de las colas de prioridad
  Implementaciones del TAD de las colas de prioridad
     Las colas de prioridad como listas



Tema 16: El TAD de las colas de prioridad

  1. Especificación del TAD de las colas de prioridad

  2. Implementaciones del TAD de las colas de prioridad
        Las colas de prioridad como listas
        Las colas de prioridad como montículos

  3. Comprobación de las implementaciones con QuickCheck




                                                           8 / 28
IM Tema 16: El TAD de las colas de prioridad
  Implementaciones del TAD de las colas de prioridad
     Las colas de prioridad como listas



Las colas de prioridad como listas
         Cabecera del módulo:

         module ColaDePrioridadConListas
             (CPrioridad,
              vacia, -- Ord a => CPrioridad a
              inserta, -- Ord a => a -> CPrioridad     a -> CPrioridad
              primero, -- Ord a => CPrioridad a ->     a
              resto, -- Ord a => CPrioridad a ->       CPrioridad a
              esVacia, -- Ord a => CPrioridad a ->     Bool
              valida -- Ord a => CPrioridad a ->       Bool
             ) where
         Colas de prioridad mediante listas:

         newtype CPrioridad a = CP [a]
             deriving (Eq, Show)
                                                                   9 / 28
IM Tema 16: El TAD de las colas de prioridad
  Implementaciones del TAD de las colas de prioridad
     Las colas de prioridad como listas



Las colas de prioridad como listas
         Ejemplo de cola de prioridad: cp1 es la cola de prioridad obtenida
         añadiéndole a la cola vacía los elementos 3, 1, 7, 2 y 9.
          cp1      CP [1,2,3,7,9]

         cp1 :: CPrioridad Int
         cp1 = foldr inserta vacia [3,1,7,2,9]
         (valida c) se verifica si c es una cola de prioridad válida; es
         decir, está ordenada crecientemente. Por ejemplo,
          valida (CP [1,3,5])           True
          valida (CP [1,5,3])           False

         valida :: Ord a => CPrioridad a -> Bool
         valida (CP xs) = ordenada xs
             where ordenada (x:y:zs) = x <= y && ordenada (y:zs)
                   ordenada _        = True                    10 / 28
IM Tema 16: El TAD de las colas de prioridad
  Implementaciones del TAD de las colas de prioridad
     Las colas de prioridad como listas



Las colas de prioridad como listas
         vacia es la cola de prioridad vacía. Por ejemplo,
          vacia        CP []

         vacia :: Ord a => CPrioridad a
         vacia = CP []
         (inserta x c) es la cola obtenida añadiendo el elemento x a la
         cola de prioridad c. Por ejemplo,
          cp1                     CP [1,2,3,7,9]
          inserta 5 cp1           CP [1,2,3,5,7,9]

         inserta :: Ord a => a -> CPrioridad a -> CPrioridad a
         inserta x (CP q) = CP (ins x q)
             where ins x []                   = [x]
                   ins x r@(e:r') | x < e     = x:r
                                  | otherwise = e:ins x r'                11 / 28
IM Tema 16: El TAD de las colas de prioridad
  Implementaciones del TAD de las colas de prioridad
     Las colas de prioridad como listas



Las colas de prioridad como listas
         (primero c) es el primer elemento de la cola de prioridad c.
          cp1                CP [1,2,3,7,9]
          primero cp1        1

         primero :: Ord a => CPrioridad a -> a
         primero (CP(x:_)) = x
         primero _         = error "primero: cola vacia"
         (resto c) es la cola de prioridad obtenida eliminando el primer
         elemento de la cola de prioridad c. Por ejemplo,
          cp1               CP [1,2,3,7,9]
          resto cp1         CP [2,3,7,9]

         resto :: Ord a => CPrioridad a -> CPrioridad a
         resto (CP (_:xs)) = CP xs
         resto _           = error "resto: cola vacia"                     12 / 28
IM Tema 16: El TAD de las colas de prioridad
  Implementaciones del TAD de las colas de prioridad
     Las colas de prioridad como listas



Las colas de prioridad como listas
         (esVacia c) se verifica si la cola de prioridad c es vacía. Por
         ejemplo,
          esVacia cp1          False
          esVacia vacia        True

         esVacia :: Ord a => CPrioridad a -> Bool
         esVacia (CP xs) = null xs




                                                                          13 / 28
IM Tema 16: El TAD de las colas de prioridad
  Implementaciones del TAD de las colas de prioridad
     Las colas de prioridad como montículos



Tema 16: El TAD de las colas de prioridad

  1. Especificación del TAD de las colas de prioridad

  2. Implementaciones del TAD de las colas de prioridad
        Las colas de prioridad como listas
        Las colas de prioridad como montículos

  3. Comprobación de las implementaciones con QuickCheck




                                                           14 / 28
IM Tema 16: El TAD de las colas de prioridad
  Implementaciones del TAD de las colas de prioridad
     Las colas de prioridad como montículos



Las colas de prioridad como montículos
  La implementación de las colas de prioridad como montículos
  (ColaDePrioridadConMonticulos.hs) se encuentra en en el tema
  20 (El TAD de los montículos).




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



Tema 16: El TAD de las colas de prioridad

  1. Especificación del TAD de las colas de prioridad

  2. Implementaciones del TAD de las colas de prioridad

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




                                                                    16 / 28
IM Tema 16: El TAD de las colas de prioridad
  Comprobación de las implementaciones con QuickCheck
     Librerías auxiliares



Importación de librerías en el módulo de comprobación
         Importación de la implementación de colas de prioridad que se
         desea verificar.

         import ColaDePrioridadConListas
         -- ColaDePrioridadConMonticulos.hs
         Importación de las librerías de comprobación

         import Test.QuickCheck
         import Test.Framework
         import Test.Framework.Providers.QuickCheck2




                                                                         17 / 28
IM Tema 16: El TAD de las colas de prioridad
  Comprobación de las implementaciones con QuickCheck
     Generador de colas de prioridad



Tema 16: El TAD de las colas de prioridad

  1. Especificación del TAD de las colas de prioridad

  2. Implementaciones del TAD de las colas de prioridad

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




                                                                    18 / 28
IM Tema 16: El TAD de las colas de prioridad
  Comprobación de las implementaciones con QuickCheck
     Generador de colas de prioridad



Generador de colas de prioridad
         genCPrioridad es un generador de colas de prioridad. Por
         ejemplo,
          ghci> sample genCPrioridad
          CP [-4]
          CP [-2,-1,-1,2,5]
          ...

         genCPrioridad :: (Arbitrary a, Num a, Ord a)
                          => Gen (CPrioridad a)
         genCPrioridad = do xs <- listOf arbitrary
                            return (foldr inserta vacia xs)

         instance (Arbitrary a, Num a, Ord a)
                  => Arbitrary (CPrioridad a) where
             arbitrary = genCPrioridad
                                                                    19 / 28
IM Tema 16: El TAD de las colas de prioridad
  Comprobación de las implementaciones con QuickCheck
     Generador de colas de prioridad



Corrección del generador de colas de prioridad
         Las colas de prioridad producidas por genCPrioridad son
         válidas.

         prop_genCPrioridad_correcto :: CPrioridad Int -> Bool
         prop_genCPrioridad_correcto c = valida c

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




                                                                   20 / 28
IM Tema 16: El TAD de las colas de prioridad
  Comprobación de las implementaciones con QuickCheck
     Especificación de las propiedades de las colas de prioridad



Tema 16: El TAD de las colas de prioridad

  1. Especificación del TAD de las colas de prioridad

  2. Implementaciones del TAD de las colas de prioridad

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




                                                                    21 / 28
IM Tema 16: El TAD de las colas de prioridad
  Comprobación de las implementaciones con QuickCheck
     Especificación de las propiedades de las colas de prioridad



Especificación de las propiedades de colas de prioridad
         Si se añade dos elementos a una cola de prioridad se obtiene la
         misma cola de prioridad idependientemente del orden en que se
         añadan los elementos.

         prop_inserta_conmuta :: Int -> Int -> CPrioridad Int
                                 -> Bool
         prop_inserta_conmuta x y c =
             inserta x (inserta y c) == inserta y (inserta x c)
         La cabeza de la cola de prioridad obtenida anadiendo un
         elemento x a la cola de prioridad vacía es x.

         prop_primero_inserta_vacia :: Int -> CPrioridad Int -> Boo
         prop_primero_inserta_vacia x c =
             primero (inserta x vacia) == x
                                                                           22 / 28
IM Tema 16: El TAD de las colas de prioridad
  Comprobación de las implementaciones con QuickCheck
     Especificación de las propiedades de las colas de prioridad



Especificación de las propiedades de colas de prioridad
         El primer elemento de una cola de prioridad c no cambia cuando
         se le añade un elemento mayor o igual que algún elemento de c.

         prop_primero_inserta :: Int -> Int -> CPrioridad Int
                                 -> Property
         prop_primero_inserta x y c =
             x <= y ==>
             primero (inserta y c') == primero c'
             where c' = inserta x c
         El resto de añadir un elemento a la cola de prioridad vacía es la
         cola vacía.

         prop_resto_inserta_vacia :: Int -> Bool
         prop_resto_inserta_vacia x =
             resto (inserta x vacia) == vacia
                                                                             23 / 28
IM Tema 16: El TAD de las colas de prioridad
  Comprobación de las implementaciones con QuickCheck
     Especificación de las propiedades de las colas de prioridad



Especificación de las propiedades de colas de prioridad
         El resto de la cola de prioridad obtenida añadiendo un elemento y
         a una cola c’ (que tiene algún elemento menor o igual que y) es
         la cola que se obtiene añadiendo y al resto de c’.

         prop_resto_inserta :: Int -> Int -> CPrioridad Int
                               -> Property
         prop_resto_inserta x y c =
             x <= y ==>
             resto (inserta y c') == inserta y (resto c')
             where c' = inserta x c
         vacia es una cola vacía.

         prop_vacia_es_vacia :: Bool
         prop_vacia_es_vacia = esVacia (vacia :: CPrioridad Int)
                                                                             24 / 28
IM Tema 16: El TAD de las colas de prioridad
  Comprobación de las implementaciones con QuickCheck
     Especificación de las propiedades de las colas de prioridad



Especificación de las propiedades de colas de prioridad
         Si se añade un elemento a una cola de prioridad se obtiene una
         cola no vacía.

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




                                                                          25 / 28
IM Tema 16: El TAD de las colas de prioridad
  Comprobación de las implementaciones con QuickCheck
     Comprobación de las propiedades



Tema 16: El TAD de las colas de prioridad

  1. Especificación del TAD de las colas de prioridad

  2. Implementaciones del TAD de las colas de prioridad

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




                                                                    26 / 28
IM Tema 16: El TAD de las colas de prioridad
  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 "Corrección del generador"
                   [testProperty "P0" prop_genCPrioridad_correcto],
                  testGroup "Propiedade de colas de prioriad:"
                   [testProperty "P1" prop_inserta_conmuta,
                    testProperty "P2" prop_primero_inserta_vacia,
                    testProperty "P3" prop_primero_inserta,
                    testProperty "P4" prop_resto_inserta_vacia,
                    testProperty "P5" prop_resto_inserta,
                    testProperty "P6" prop_vacia_es_vacia,
                    testProperty "P7" prop_inserta_no_es_vacia]]
                                                                       27 / 28
IM Tema 16: El TAD de las colas de prioridad
  Comprobación de las implementaciones con QuickCheck
     Comprobación de las propiedades



Comprobación de las propiedades de las colas de prioridad
   ghci> compruebaPropiedades
   Corrección del generador:
     P0: [OK, passed 100 tests]
   Propiedades de colas de prioridad:
     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]

            Properties                 Total
     Passed 8                          8
     Failed 0                          0
     Total 8                           8
                                                        28 / 28

Mais conteúdo relacionado

Destaque (6)

Estructura de datos.vrb
Estructura de datos.vrbEstructura de datos.vrb
Estructura de datos.vrb
 
COLAS
COLASCOLAS
COLAS
 
Arboles y Colas de Prioridad en Java
Arboles y Colas de Prioridad en JavaArboles y Colas de Prioridad en Java
Arboles y Colas de Prioridad en Java
 
ARITMETICA DE BALDOR
ARITMETICA DE BALDORARITMETICA DE BALDOR
ARITMETICA DE BALDOR
 
Qué son las colas de prioridad
Qué son las colas de prioridadQué son las colas de prioridad
Qué son las colas de prioridad
 
Colas de prioridad
Colas de prioridadColas de prioridad
Colas de prioridad
 

Semelhante a I1M2010-T16: El tipo abstracto de las colas de prioridad en Haskell

Aedii pilas colas_y_recursividad_teoria_sem07_a_sem10
Aedii pilas colas_y_recursividad_teoria_sem07_a_sem10Aedii pilas colas_y_recursividad_teoria_sem07_a_sem10
Aedii pilas colas_y_recursividad_teoria_sem07_a_sem10
chrisflores001
 
Estructura de datos
Estructura de datos Estructura de datos
Estructura de datos
jarydr18
 
Estructura dedatos
Estructura dedatosEstructura dedatos
Estructura dedatos
Jorge
 

Semelhante a I1M2010-T16: El tipo abstracto de las colas de prioridad en Haskell (12)

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
 
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
 
Aedii pilas colas_y_recursividad_teoria_sem07_a_sem10
Aedii pilas colas_y_recursividad_teoria_sem07_a_sem10Aedii pilas colas_y_recursividad_teoria_sem07_a_sem10
Aedii pilas colas_y_recursividad_teoria_sem07_a_sem10
 
Tipos De Datos Abstractos Colas
Tipos De Datos Abstractos ColasTipos De Datos Abstractos Colas
Tipos De Datos Abstractos Colas
 
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
 
Estructura de datos
Estructura de datos Estructura de datos
Estructura de datos
 
Estructura dedatos
Estructura dedatosEstructura dedatos
Estructura dedatos
 
Funciones con vectores
Funciones con vectoresFunciones con vectores
Funciones con vectores
 
Apuntes generación de codigo intermedio
Apuntes generación de codigo intermedioApuntes generación de codigo intermedio
Apuntes generación de codigo intermedio
 
2- TDA Listas
2- TDA Listas2- TDA Listas
2- TDA Listas
 
Curso-PROPE-PyED-5-Pilas-Colas-programacion
Curso-PROPE-PyED-5-Pilas-Colas-programacionCurso-PROPE-PyED-5-Pilas-Colas-programacion
Curso-PROPE-PyED-5-Pilas-Colas-programacion
 
Pilas Colas
Pilas ColasPilas Colas
Pilas Colas
 

Mais 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 orden
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 orden
José A. Alonso
 
LMF-T5: Resolución proposicional
LMF-T5: Resolución proposicionalLMF-T5: Resolución proposicional
LMF-T5: Resolución proposicional
José A. Alonso
 
LMF-T3: Tableros semánticos
LMF-T3: Tableros semánticosLMF-T3: Tableros semánticos
LMF-T3: Tableros semánticos
José A. Alonso
 
LMF-T2: Deducción natural proposicional
LMF-T2: Deducción natural proposicionalLMF-T2: Deducción natural proposicional
LMF-T2: Deducción natural proposicional
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 Prolog
José 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 orden
José A. Alonso
 
Panorama del razonamiento automático
Panorama del razonamiento automáticoPanorama del razonamiento automático
Panorama del razonamiento automático
José A. Alonso
 
LI -T5: Resolución proposicional
LI -T5: Resolución proposicionalLI -T5: Resolución proposicional
LI -T5: Resolución proposicional
José A. Alonso
 

Mais de José A. Alonso (20)

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

Último

Proyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdfProyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdf
patriciaines1993
 
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docxTALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
NadiaMartnez11
 
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdfNUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
UPTAIDELTACHIRA
 
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
EliaHernndez7
 
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
El Fortí
 
RESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptx
RESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptxRESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptx
RESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptx
pvtablets2023
 

Último (20)

Proyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdfProyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdf
 
INSTRUCCION PREPARATORIA DE TIRO .pptx
INSTRUCCION PREPARATORIA DE TIRO   .pptxINSTRUCCION PREPARATORIA DE TIRO   .pptx
INSTRUCCION PREPARATORIA DE TIRO .pptx
 
Feliz Día de la Madre - 5 de Mayo, 2024.pdf
Feliz Día de la Madre - 5 de Mayo, 2024.pdfFeliz Día de la Madre - 5 de Mayo, 2024.pdf
Feliz Día de la Madre - 5 de Mayo, 2024.pdf
 
TIENDAS MASS MINIMARKET ESTUDIO DE MERCADO
TIENDAS MASS MINIMARKET ESTUDIO DE MERCADOTIENDAS MASS MINIMARKET ESTUDIO DE MERCADO
TIENDAS MASS MINIMARKET ESTUDIO DE MERCADO
 
Tema 19. Inmunología y el sistema inmunitario 2024
Tema 19. Inmunología y el sistema inmunitario 2024Tema 19. Inmunología y el sistema inmunitario 2024
Tema 19. Inmunología y el sistema inmunitario 2024
 
Tema 17. Biología de los microorganismos 2024
Tema 17. Biología de los microorganismos 2024Tema 17. Biología de los microorganismos 2024
Tema 17. Biología de los microorganismos 2024
 
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docxTALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
 
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESOPrueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
 
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdfNUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
 
Power Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptxPower Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptx
 
La Sostenibilidad Corporativa. Administración Ambiental
La Sostenibilidad Corporativa. Administración AmbientalLa Sostenibilidad Corporativa. Administración Ambiental
La Sostenibilidad Corporativa. Administración Ambiental
 
CONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptx
CONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptxCONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptx
CONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptx
 
Análisis de los Factores Externos de la Organización.
Análisis de los Factores Externos de la Organización.Análisis de los Factores Externos de la Organización.
Análisis de los Factores Externos de la Organización.
 
Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024
 
Infografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdfInfografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdf
 
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
 
SESION DE PERSONAL SOCIAL. La convivencia en familia 22-04-24 -.doc
SESION DE PERSONAL SOCIAL.  La convivencia en familia 22-04-24  -.docSESION DE PERSONAL SOCIAL.  La convivencia en familia 22-04-24  -.doc
SESION DE PERSONAL SOCIAL. La convivencia en familia 22-04-24 -.doc
 
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
 
Supuestos_prácticos_funciones.docx
Supuestos_prácticos_funciones.docxSupuestos_prácticos_funciones.docx
Supuestos_prácticos_funciones.docx
 
RESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptx
RESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptxRESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptx
RESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptx
 

I1M2010-T16: El tipo abstracto de las colas de prioridad en Haskell

  • 1. Tema 16: El TAD de las colas de prioridad 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 16: El TAD de las colas de prioridad Tema 16: El TAD de las colas de prioridad 1. Especificación del TAD de las colas de prioridad Signatura del TAD colas de prioridad Propiedades del TAD de las colas de prioridad 2. Implementaciones del TAD de las colas de prioridad Las colas de prioridad como listas Las colas de prioridad como montículos 3. Comprobación de las implementaciones con QuickCheck Librerías auxiliares Generador de colas de prioridad Especificación de las propiedades de las colas de prioridad Comprobación de las propiedades 2 / 28
  • 3. IM Tema 16: El TAD de las colas de prioridad Especificación del TAD de las colas de prioridad Signatura del TAD colas de prioridad Tema 16: El TAD de las colas de prioridad 1. Especificación del TAD de las colas de prioridad Signatura del TAD colas de prioridad Propiedades del TAD de las colas de prioridad 2. Implementaciones del TAD de las colas de prioridad 3. Comprobación de las implementaciones con QuickCheck 3 / 28
  • 4. IM Tema 16: El TAD de las colas de prioridad Especificación del TAD de las colas de prioridad Signatura del TAD colas de prioridad Descripción de las colas de prioridad Una cola de prioridad es una cola en la que cada elemento tiene asociada una prioridad. La operación de extracción siempre elige el elemento de menor prioridad. Ejemplo: La cola de las ciudades ordenadas por su distancia al destino final. 4 / 28
  • 5. IM Tema 16: El TAD de las colas de prioridad Especificación del TAD de las colas de prioridad Signatura del TAD colas de prioridad Signatura de las colas de prioridad Signatura: vacia, :: Ord a => CPrioridad a inserta, :: Ord a => a -> CPrioridad a -> CPrioridad a primero, :: Ord a => CPrioridad a -> a resto, :: Ord a => CPrioridad a -> CPrioridad a esVacia, :: Ord a => CPrioridad a -> Bool valida :: Ord a => CPrioridad a -> Bool Descripción de las operaciones: vacia es la cola de prioridad vacía. (inserta x c) añade el elemento x a la cola de prioridad c. (primero c) es el primer elemento de la cola de prioridad c. (resto c) es el resto de la cola de prioridad c. (esVacia c) se verifica si la cola de prioridad c es vacía. (valida c) se verifica si c es una cola de prioridad válida. 5 / 28
  • 6. IM Tema 16: El TAD de las colas de prioridad Especificación del TAD de las colas de prioridad Propiedades del TAD de las colas de prioridad Tema 16: El TAD de las colas de prioridad 1. Especificación del TAD de las colas de prioridad Signatura del TAD colas de prioridad Propiedades del TAD de las colas de prioridad 2. Implementaciones del TAD de las colas de prioridad 3. Comprobación de las implementaciones con QuickCheck 6 / 28
  • 7. IM Tema 16: El TAD de las colas de prioridad Especificación del TAD de las colas de prioridad Propiedades del TAD de las colas de prioridad Propiedades del TAD de las colas de prioridad 1. inserta x (inserta y c) == inserta y (inserta x c) 2. primero (inserta x vacia) == x 3. Si x <= y, entonces primero (inserta y (inserta x c)) == primero (inserta x c) 4. resto (inserta x vacia) == vacia 5. Si x <= y, entonces resto (inserta y (inserta x c)) == inserta y (resto (inserta x c)) 6. esVacia vacia 7. not (esVacia (inserta x c)) 7 / 28
  • 8. IM Tema 16: El TAD de las colas de prioridad Implementaciones del TAD de las colas de prioridad Las colas de prioridad como listas Tema 16: El TAD de las colas de prioridad 1. Especificación del TAD de las colas de prioridad 2. Implementaciones del TAD de las colas de prioridad Las colas de prioridad como listas Las colas de prioridad como montículos 3. Comprobación de las implementaciones con QuickCheck 8 / 28
  • 9. IM Tema 16: El TAD de las colas de prioridad Implementaciones del TAD de las colas de prioridad Las colas de prioridad como listas Las colas de prioridad como listas Cabecera del módulo: module ColaDePrioridadConListas (CPrioridad, vacia, -- Ord a => CPrioridad a inserta, -- Ord a => a -> CPrioridad a -> CPrioridad primero, -- Ord a => CPrioridad a -> a resto, -- Ord a => CPrioridad a -> CPrioridad a esVacia, -- Ord a => CPrioridad a -> Bool valida -- Ord a => CPrioridad a -> Bool ) where Colas de prioridad mediante listas: newtype CPrioridad a = CP [a] deriving (Eq, Show) 9 / 28
  • 10. IM Tema 16: El TAD de las colas de prioridad Implementaciones del TAD de las colas de prioridad Las colas de prioridad como listas Las colas de prioridad como listas Ejemplo de cola de prioridad: cp1 es la cola de prioridad obtenida añadiéndole a la cola vacía los elementos 3, 1, 7, 2 y 9. cp1 CP [1,2,3,7,9] cp1 :: CPrioridad Int cp1 = foldr inserta vacia [3,1,7,2,9] (valida c) se verifica si c es una cola de prioridad válida; es decir, está ordenada crecientemente. Por ejemplo, valida (CP [1,3,5]) True valida (CP [1,5,3]) False valida :: Ord a => CPrioridad a -> Bool valida (CP xs) = ordenada xs where ordenada (x:y:zs) = x <= y && ordenada (y:zs) ordenada _ = True 10 / 28
  • 11. IM Tema 16: El TAD de las colas de prioridad Implementaciones del TAD de las colas de prioridad Las colas de prioridad como listas Las colas de prioridad como listas vacia es la cola de prioridad vacía. Por ejemplo, vacia CP [] vacia :: Ord a => CPrioridad a vacia = CP [] (inserta x c) es la cola obtenida añadiendo el elemento x a la cola de prioridad c. Por ejemplo, cp1 CP [1,2,3,7,9] inserta 5 cp1 CP [1,2,3,5,7,9] inserta :: Ord a => a -> CPrioridad a -> CPrioridad a inserta x (CP q) = CP (ins x q) where ins x [] = [x] ins x r@(e:r') | x < e = x:r | otherwise = e:ins x r' 11 / 28
  • 12. IM Tema 16: El TAD de las colas de prioridad Implementaciones del TAD de las colas de prioridad Las colas de prioridad como listas Las colas de prioridad como listas (primero c) es el primer elemento de la cola de prioridad c. cp1 CP [1,2,3,7,9] primero cp1 1 primero :: Ord a => CPrioridad a -> a primero (CP(x:_)) = x primero _ = error "primero: cola vacia" (resto c) es la cola de prioridad obtenida eliminando el primer elemento de la cola de prioridad c. Por ejemplo, cp1 CP [1,2,3,7,9] resto cp1 CP [2,3,7,9] resto :: Ord a => CPrioridad a -> CPrioridad a resto (CP (_:xs)) = CP xs resto _ = error "resto: cola vacia" 12 / 28
  • 13. IM Tema 16: El TAD de las colas de prioridad Implementaciones del TAD de las colas de prioridad Las colas de prioridad como listas Las colas de prioridad como listas (esVacia c) se verifica si la cola de prioridad c es vacía. Por ejemplo, esVacia cp1 False esVacia vacia True esVacia :: Ord a => CPrioridad a -> Bool esVacia (CP xs) = null xs 13 / 28
  • 14. IM Tema 16: El TAD de las colas de prioridad Implementaciones del TAD de las colas de prioridad Las colas de prioridad como montículos Tema 16: El TAD de las colas de prioridad 1. Especificación del TAD de las colas de prioridad 2. Implementaciones del TAD de las colas de prioridad Las colas de prioridad como listas Las colas de prioridad como montículos 3. Comprobación de las implementaciones con QuickCheck 14 / 28
  • 15. IM Tema 16: El TAD de las colas de prioridad Implementaciones del TAD de las colas de prioridad Las colas de prioridad como montículos Las colas de prioridad como montículos La implementación de las colas de prioridad como montículos (ColaDePrioridadConMonticulos.hs) se encuentra en en el tema 20 (El TAD de los montículos). 15 / 28
  • 16. IM Tema 16: El TAD de las colas de prioridad Comprobación de las implementaciones con QuickCheck Librerías auxiliares Tema 16: El TAD de las colas de prioridad 1. Especificación del TAD de las colas de prioridad 2. Implementaciones del TAD de las colas de prioridad 3. Comprobación de las implementaciones con QuickCheck Librerías auxiliares Generador de colas de prioridad Especificación de las propiedades de las colas de prioridad Comprobación de las propiedades 16 / 28
  • 17. IM Tema 16: El TAD de las colas de prioridad Comprobación de las implementaciones con QuickCheck Librerías auxiliares Importación de librerías en el módulo de comprobación Importación de la implementación de colas de prioridad que se desea verificar. import ColaDePrioridadConListas -- ColaDePrioridadConMonticulos.hs Importación de las librerías de comprobación import Test.QuickCheck import Test.Framework import Test.Framework.Providers.QuickCheck2 17 / 28
  • 18. IM Tema 16: El TAD de las colas de prioridad Comprobación de las implementaciones con QuickCheck Generador de colas de prioridad Tema 16: El TAD de las colas de prioridad 1. Especificación del TAD de las colas de prioridad 2. Implementaciones del TAD de las colas de prioridad 3. Comprobación de las implementaciones con QuickCheck Librerías auxiliares Generador de colas de prioridad Especificación de las propiedades de las colas de prioridad Comprobación de las propiedades 18 / 28
  • 19. IM Tema 16: El TAD de las colas de prioridad Comprobación de las implementaciones con QuickCheck Generador de colas de prioridad Generador de colas de prioridad genCPrioridad es un generador de colas de prioridad. Por ejemplo, ghci> sample genCPrioridad CP [-4] CP [-2,-1,-1,2,5] ... genCPrioridad :: (Arbitrary a, Num a, Ord a) => Gen (CPrioridad a) genCPrioridad = do xs <- listOf arbitrary return (foldr inserta vacia xs) instance (Arbitrary a, Num a, Ord a) => Arbitrary (CPrioridad a) where arbitrary = genCPrioridad 19 / 28
  • 20. IM Tema 16: El TAD de las colas de prioridad Comprobación de las implementaciones con QuickCheck Generador de colas de prioridad Corrección del generador de colas de prioridad Las colas de prioridad producidas por genCPrioridad son válidas. prop_genCPrioridad_correcto :: CPrioridad Int -> Bool prop_genCPrioridad_correcto c = valida c Comprobación. ghci> quickCheck prop_genCPrioridad_correcto +++ OK, passed 100 tests. 20 / 28
  • 21. IM Tema 16: El TAD de las colas de prioridad Comprobación de las implementaciones con QuickCheck Especificación de las propiedades de las colas de prioridad Tema 16: El TAD de las colas de prioridad 1. Especificación del TAD de las colas de prioridad 2. Implementaciones del TAD de las colas de prioridad 3. Comprobación de las implementaciones con QuickCheck Librerías auxiliares Generador de colas de prioridad Especificación de las propiedades de las colas de prioridad Comprobación de las propiedades 21 / 28
  • 22. IM Tema 16: El TAD de las colas de prioridad Comprobación de las implementaciones con QuickCheck Especificación de las propiedades de las colas de prioridad Especificación de las propiedades de colas de prioridad Si se añade dos elementos a una cola de prioridad se obtiene la misma cola de prioridad idependientemente del orden en que se añadan los elementos. prop_inserta_conmuta :: Int -> Int -> CPrioridad Int -> Bool prop_inserta_conmuta x y c = inserta x (inserta y c) == inserta y (inserta x c) La cabeza de la cola de prioridad obtenida anadiendo un elemento x a la cola de prioridad vacía es x. prop_primero_inserta_vacia :: Int -> CPrioridad Int -> Boo prop_primero_inserta_vacia x c = primero (inserta x vacia) == x 22 / 28
  • 23. IM Tema 16: El TAD de las colas de prioridad Comprobación de las implementaciones con QuickCheck Especificación de las propiedades de las colas de prioridad Especificación de las propiedades de colas de prioridad El primer elemento de una cola de prioridad c no cambia cuando se le añade un elemento mayor o igual que algún elemento de c. prop_primero_inserta :: Int -> Int -> CPrioridad Int -> Property prop_primero_inserta x y c = x <= y ==> primero (inserta y c') == primero c' where c' = inserta x c El resto de añadir un elemento a la cola de prioridad vacía es la cola vacía. prop_resto_inserta_vacia :: Int -> Bool prop_resto_inserta_vacia x = resto (inserta x vacia) == vacia 23 / 28
  • 24. IM Tema 16: El TAD de las colas de prioridad Comprobación de las implementaciones con QuickCheck Especificación de las propiedades de las colas de prioridad Especificación de las propiedades de colas de prioridad El resto de la cola de prioridad obtenida añadiendo un elemento y a una cola c’ (que tiene algún elemento menor o igual que y) es la cola que se obtiene añadiendo y al resto de c’. prop_resto_inserta :: Int -> Int -> CPrioridad Int -> Property prop_resto_inserta x y c = x <= y ==> resto (inserta y c') == inserta y (resto c') where c' = inserta x c vacia es una cola vacía. prop_vacia_es_vacia :: Bool prop_vacia_es_vacia = esVacia (vacia :: CPrioridad Int) 24 / 28
  • 25. IM Tema 16: El TAD de las colas de prioridad Comprobación de las implementaciones con QuickCheck Especificación de las propiedades de las colas de prioridad Especificación de las propiedades de colas de prioridad Si se añade un elemento a una cola de prioridad se obtiene una cola no vacía. prop_inserta_no_es_vacia :: Int -> CPrioridad Int -> Bool prop_inserta_no_es_vacia x c = not (esVacia (inserta x c)) 25 / 28
  • 26. IM Tema 16: El TAD de las colas de prioridad Comprobación de las implementaciones con QuickCheck Comprobación de las propiedades Tema 16: El TAD de las colas de prioridad 1. Especificación del TAD de las colas de prioridad 2. Implementaciones del TAD de las colas de prioridad 3. Comprobación de las implementaciones con QuickCheck Librerías auxiliares Generador de colas de prioridad Especificación de las propiedades de las colas de prioridad Comprobación de las propiedades 26 / 28
  • 27. IM Tema 16: El TAD de las colas de prioridad 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 "Corrección del generador" [testProperty "P0" prop_genCPrioridad_correcto], testGroup "Propiedade de colas de prioriad:" [testProperty "P1" prop_inserta_conmuta, testProperty "P2" prop_primero_inserta_vacia, testProperty "P3" prop_primero_inserta, testProperty "P4" prop_resto_inserta_vacia, testProperty "P5" prop_resto_inserta, testProperty "P6" prop_vacia_es_vacia, testProperty "P7" prop_inserta_no_es_vacia]] 27 / 28
  • 28. IM Tema 16: El TAD de las colas de prioridad Comprobación de las implementaciones con QuickCheck Comprobación de las propiedades Comprobación de las propiedades de las colas de prioridad ghci> compruebaPropiedades Corrección del generador: P0: [OK, passed 100 tests] Propiedades de colas de prioridad: 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] Properties Total Passed 8 8 Failed 0 0 Total 8 8 28 / 28