SlideShare uma empresa Scribd logo
1 de 31
Baixar para ler offline
Tema 14: El TAD de las pilas
          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 14: El TAD de las pilas




Tema 14: El TAD de las pilas
 1. Tipos abstractos de datos
       Abstracción y tipos abstractos de datos
 2. Especificación del TAD de las pilas
       Signatura del TAD pilas
       Propiedades del TAD de las pilas
 3. Implementaciones del TAD de las pilas
       Las pilas como tipos de datos algebraicos
       Las pilas como listas
 4. Comprobación de las implementaciones con QuickCheck
      Librerías auxiliares
      Generador de pilas
      Especificación de las propiedades de las pilas
      Comprobación de las propiedades
                                                          2 / 31
IM Tema 14: El TAD de las pilas
  Tipos abstractos de datos
     Abstracción y tipos abstractos de datos



Tema 14: El TAD de las pilas

 1. Tipos abstractos de datos
       Abstracción y tipos abstractos de datos

 2. Especificación del TAD de las pilas

 3. Implementaciones del TAD de las pilas

 4. Comprobación de las implementaciones con QuickCheck




                                                          3 / 31
IM Tema 14: El TAD de las pilas
  Tipos abstractos de datos
     Abstracción y tipos abstractos de datos



Abstracción y tipos abstractos de datos
         La abstracción es un mecanismo para comprender problemas
         que involucran una gran cantidad de detalles.
         Aspectos de la abstracción:
                 Destacar los detalles relevantes.
                 Ocultar los detalles irrelevantes.
         Un tipo abstracto de datos (TAD) es una colección de valores
         y operaciones que se definen mediante una especificación que es
         independiente de cualquier representación.
         Un TAD es una abstracción:
                 Se destacan los detalles (normalmente pocos) de la especificación
                 (el qué).
                 Se ocultan los detalles (normalmente numerosos) de la
                 implementación (el cómo).
         Analogía con las estructuras algebraicas.
                                                                                    4 / 31
IM Tema 14: El TAD de las pilas
  Especificación del TAD de las pilas
     Signatura del TAD pilas



Tema 14: El TAD de las pilas

 1. Tipos abstractos de datos

 2. Especificación del TAD de las pilas
       Signatura del TAD pilas
       Propiedades del TAD de las pilas

 3. Implementaciones del TAD de las pilas

 4. Comprobación de las implementaciones con QuickCheck




                                                          5 / 31
IM Tema 14: El TAD de las pilas
  Especificación del TAD de las pilas
     Signatura del TAD pilas



Descripción informal de las pilas
         Una pila es una estructura de datos, caracterizada por ser una
         secuencia de elementos en la que las operaciones de inserción de
         extracción se realizan por el mismo extremo.
         La pilas también se llaman estructuras LIFO (del inglés Last In
         First Out), debido a que el último elemento en entrar será el
         primero en salir.
         Analogía con las pilas de platos.




                                                                            6 / 31
IM Tema 14: El TAD de las pilas
  Especificación del TAD de las pilas
     Signatura del TAD pilas



Signatura del TAD de las pilas
         Signatura:
          vacia      ::            Pila   a
          apila      ::            a ->   Pila   a -> Pila a
          cima       ::            Pila   a ->   a
          desapila ::              Pila   a ->   Pila a
          esVacia ::               Pila   a ->   Bool
         Descripción:
                 vacia es la pila vacía.
                 (apila x p) es la pila obtenida añadiendo x al principio de p.
                 (cima p) es la cima de la pila p.
                 (desapila p) es la pila obtenida suprimiendo la cima de p.
                 (esVacia p) se verifica si p es la pila vacía.



                                                                                  7 / 31
IM Tema 14: El TAD de las pilas
  Especificación del TAD de las pilas
     Propiedades del TAD de las pilas



Tema 14: El TAD de las pilas

 1. Tipos abstractos de datos

 2. Especificación del TAD de las pilas
       Signatura del TAD pilas
       Propiedades del TAD de las pilas

 3. Implementaciones del TAD de las pilas

 4. Comprobación de las implementaciones con QuickCheck




                                                          8 / 31
IM Tema 14: El TAD de las pilas
  Especificación del TAD de las pilas
     Propiedades del TAD de las pilas



Propiedades de las pilas
    1. cima (apila x p) == x
    2. desapila (apila x p) == p
    3. esVacia vacia
    4. not (esVacia (apila x p))




                                        9 / 31
IM Tema 14: El TAD de las pilas
  Implementaciones del TAD de las pilas
     Las pilas como tipos de datos algebraicos



Tema 14: El TAD de las pilas

 1. Tipos abstractos de datos

 2. Especificación del TAD de las pilas

 3. Implementaciones del TAD de las pilas
       Las pilas como tipos de datos algebraicos
       Las pilas como listas

 4. Comprobación de las implementaciones con QuickCheck




                                                          10 / 31
IM Tema 14: El TAD de las pilas
  Implementaciones del TAD de las pilas
     Las pilas como tipos de datos algebraicos



Las pilas mediante tipos de datos algebraicos
         Cabecera del módulo:

         module PilaConTipoDeDatoAlgebraico
             (Pila,
              vacia,    -- Pila a
              apila,    -- a -> Pila a -> Pila a
              cima,     -- Pila a -> a
              desapila, -- Pila a -> Pila a
              esVacia -- Pila a -> Bool
             ) where
         Tipo de dato algebraico de las pilas.

         data Pila a = Vacia | P a (Pila a)
                       deriving Eq
                                                   11 / 31
IM Tema 14: El TAD de las pilas
  Implementaciones del TAD de las pilas
     Las pilas como tipos de datos algebraicos



Las pilas mediante tipos de datos algebraicos
         Procedimiento de escritura de pilas.

         instance (Show a) => Show (Pila a) where
             showsPrec p Vacia cad = showChar '-' cad
             showsPrec p (P x s) cad =
                shows x (showChar '|' (shows s cad))
         Ejemplo de pila:
                Definición

                p1 :: Pila Int
                p1 = apila 1 (apila 2 (apila 3 vacia))
                Sesión
                  ghci> p1
                  1|2|3|-
                                                         12 / 31
IM Tema 14: El TAD de las pilas
  Implementaciones del TAD de las pilas
     Las pilas como tipos de datos algebraicos



Las pilas mediante tipos de datos algebraicos
         vacia es la pila vacía. Por ejemplo,
          ghci> vacia
          -

         vacia :: Pila a
         vacia = Vacia

         (apila x p) es la pila obtenida añadiedo x encima de la pila p. Por
         ejemplo,
          apila 4 p1 => 4|1|2|3|-

         apila :: a -> Pila a -> Pila a
         apila x p = P x p


                                                                               13 / 31
IM Tema 14: El TAD de las pilas
  Implementaciones del TAD de las pilas
     Las pilas como tipos de datos algebraicos



Las pilas mediante tipos de datos algebraicos
         (cima p) es la cima de la pila p. Por ejemplo,
          cima p1 == 1

         cima :: Pila a -> a
         cima Vacia = error "cima: pila vacia"
         cima (P x _) = x

         (desapila p) es la pila obtenida suprimiendo la cima de la pila
         p. Por ejemplo,
          desapila p1 => 2|3|-

         desapila :: Pila a -> Pila a
         desapila Vacia   = error "desapila: pila vacia"
         desapila (P _ p) = p
                                                                           14 / 31
IM Tema 14: El TAD de las pilas
  Implementaciones del TAD de las pilas
     Las pilas como tipos de datos algebraicos



Las pilas mediante tipos de datos algebraicos
         (esVacia p) se verifica si p es la pila vacía. Por ejemplo,
          esVacia p1      == False
          esVacia vacia == True

         esVacia :: Pila a -> Bool
         esVacia Vacia = True
         esVacia _     = False




                                                                      15 / 31
IM Tema 14: El TAD de las pilas
  Implementaciones del TAD de las pilas
     Las pilas como listas



Tema 14: El TAD de las pilas

 1. Tipos abstractos de datos

 2. Especificación del TAD de las pilas

 3. Implementaciones del TAD de las pilas
       Las pilas como tipos de datos algebraicos
       Las pilas como listas

 4. Comprobación de las implementaciones con QuickCheck




                                                          16 / 31
IM Tema 14: El TAD de las pilas
  Implementaciones del TAD de las pilas
     Las pilas como listas



Implementación de las pilas mediante listas
         Cabecera del módulo

         module PilaConListas
             (Pila,
              vacia,      -- Pila         a
              apila,      -- a ->         Pila   a -> Pila a
              cima,       -- Pila         a ->   a
              desapila, -- Pila           a ->   Pila a
              esVacia     -- Pila         a ->   Bool
             ) where
         Tipo de datos de las pilas:

         newtype Pila a = P [a]
             deriving Eq
                                                               17 / 31
IM Tema 14: El TAD de las pilas
  Implementaciones del TAD de las pilas
     Las pilas como listas



Implementación de las pilas mediante listas
         Procedimiento de escritura de pilas.

         instance (Show a) => Show (Pila a) where
             showsPrec p (P [])     cad = showChar '-' cad
             showsPrec p (P (x:xs)) cad
                 = shows x (showChar '|' (shows (P xs) cad))
         Ejemplo de pila: p1 es la pila obtenida anadiéndole los elementos
         3, 2 y 1 a la pila vacía. Por ejemplo,
          ghci> p1
          1|2|3|-

         p1 = apila 1 (apila 2 (apila 3 vacia))


                                                                             18 / 31
IM Tema 14: El TAD de las pilas
  Implementaciones del TAD de las pilas
     Las pilas como listas



Implementación de las pilas mediante listas
         vacia es la pila vacía. Por ejemplo,
          ghci> vacia
          -

         vacia :: Pila a
         vacia = P []

         (apila x p) es la pila obtenida añadiendo x encima de la pila
         p. Por ejemplo,
          apila 4 p1 => 4|1|2|3|-|

         apila :: a -> Pila a -> Pila a
         apila x (P xs) = P (x:xs)

                                                                         19 / 31
IM Tema 14: El TAD de las pilas
  Implementaciones del TAD de las pilas
     Las pilas como listas



Implementación de las pilas mediante listas
         (cima p) es la cima de la pila p. Por ejemplo,
          cima p1 == 1

         cima :: Pila a -> a
         cima (P (x:_)) = x
         cima (P [])    = error "cima de la pila vacia"

         (desapila p) es la pila obtenida suprimiendo la cima de la pila
         p. Por ejemplo,
          desapila p1 => 2|3|-

         desapila :: Pila a -> Pila a
         desapila (P [])     = error "desapila la pila vacia"
         desapila (P (_:xs)) = P xs
                                                                           20 / 31
IM Tema 14: El TAD de las pilas
  Implementaciones del TAD de las pilas
     Las pilas como listas



Implementación de las pilas mediante listas
         (esVacia p) se verifica si p es la pila vacía. Por ejemplo,
          esVacia p1      == False
          esVacia vacia == True

         esVacia :: Pila a -> Bool
         esVacia (P xs) = null xs




                                                                      21 / 31
IM Tema 14: El TAD de las pilas
  Comprobación de las implementaciones con QuickCheck
     Librerías auxiliares



Tema 14: El TAD de las pilas

 1. Tipos abstractos de datos

 2. Especificación del TAD de las pilas

 3. Implementaciones del TAD de las pilas

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


                                                          22 / 31
IM Tema 14: El TAD de las pilas
  Comprobación de las implementaciones con QuickCheck
     Librerías auxiliares



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

         import PilaConTipoDeDatoAlgebraico
         -- import PilaConListas

         Importación de las librerías de comprobación

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




                                                                  23 / 31
IM Tema 14: El TAD de las pilas
  Comprobación de las implementaciones con QuickCheck
     Generador de pilas



Tema 14: El TAD de las pilas

 1. Tipos abstractos de datos

 2. Especificación del TAD de las pilas

 3. Implementaciones del TAD de las pilas

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


                                                          24 / 31
IM Tema 14: El TAD de las pilas
  Comprobación de las implementaciones con QuickCheck
     Generador de pilas



Generador de pilas
         genPila es un generador de pilas. Por ejemplo,
          ghci> sample genPila
          0|0|-
          -6|4|-3|3|0|-
          -
          9|5|-1|-3|0|-8|-5|-7|2|-
          ...

         genPila :: (Num a, Arbitrary a) => Gen (Pila a)
         genPila = do xs <- listOf arbitrary
                      return (foldr apila vacia xs)

         instance (Arbitrary a, Num a) => Arbitrary (Pila a) where
             arbitrary = genPila
                                                               25 / 31
IM Tema 14: El TAD de las pilas
  Comprobación de las implementaciones con QuickCheck
     Especificación de las propiedades de las pilas



Tema 14: El TAD de las pilas

 1. Tipos abstractos de datos

 2. Especificación del TAD de las pilas

 3. Implementaciones del TAD de las pilas

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


                                                          26 / 31
IM Tema 14: El TAD de las pilas
  Comprobación de las implementaciones con QuickCheck
     Especificación de las propiedades de las pilas



Especificación de las propiedades de pilas
         La cima de la pila que resulta de añadir x a la pila p es x.

         prop_cima_apila :: Int -> Pila Int -> Bool
         prop_cima_apila x p =
             cima (apila x p) == x

         La pila que resulta de desapilar después de añadir cualquier
         elemento a una pila p es p.

         prop_desapila_apila :: Int -> Pila Int -> Bool
         prop_desapila_apila x p =
             desapila (apila x p) == p



                                                                        27 / 31
IM Tema 14: El TAD de las pilas
  Comprobación de las implementaciones con QuickCheck
     Especificación de las propiedades de las pilas



Especificación de las propiedades de pila
         La pila vacía está vacía.

         prop_vacia_esta_vacia :: Bool
         prop_vacia_esta_vacia =
             esVacia vacia
         La pila que resulta de añadir un elemento en un pila cualquiera
         no es vacía.

         prop_apila_no_es_vacia :: Int -> Pila Int -> Bool
         prop_apila_no_es_vacia x p =
             not (esVacia (apila x p))



                                                                           28 / 31
IM Tema 14: El TAD de las pilas
  Comprobación de las implementaciones con QuickCheck
     Comprobación de las propiedades



Tema 14: El TAD de las pilas

 1. Tipos abstractos de datos

 2. Especificación del TAD de las pilas

 3. Implementaciones del TAD de las pilas

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


                                                          29 / 31
IM Tema 14: El TAD de las pilas
  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 pilas"
                   [testProperty "P1" prop_cima_apila,
                    testProperty "P2" prop_desapila_apila,
                    testProperty "P3" prop_vacia_esta_vacia,
                    testProperty "P4" prop_apila_no_es_vacia]]




                                                                       30 / 31
IM Tema 14: El TAD de las pilas
  Comprobación de las implementaciones con QuickCheck
     Comprobación de las propiedades



Comprobación de las propiedades de las pilas
   ghci> compruebaPropiedades
   Propiedades del TAD pilas:
     P1: [OK, passed 100 tests]
     P2: [OK, passed 100 tests]
     P3: [OK, passed 100 tests]
     P4: [OK, passed 100 tests]

            Properties                     Total
     Passed 4                              4
     Failed 0                              0
     Total 4                               4



                                                        31 / 31

Mais conteúdo relacionado

Destaque

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
 
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
 
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
 
LMF-T5: Resolución proposicional
LMF-T5: Resolución proposicionalLMF-T5: Resolución proposicional
LMF-T5: Resolución proposicionalJosé A. Alonso
 
I1M2010-T22: Algoritmos sobre grafos en Haskell
I1M2010-T22: Algoritmos sobre grafos en HaskellI1M2010-T22: Algoritmos sobre grafos en Haskell
I1M2010-T22: Algoritmos sobre grafos en HaskellJosé 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
 
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 12: Analizadores sintácticos funcionales.
Tema 12: Analizadores sintácticos funcionales.Tema 12: Analizadores sintácticos funcionales.
Tema 12: Analizadores sintácticos funcionales.José A. Alonso
 
Panorama del razonamiento automático
Panorama del razonamiento automáticoPanorama del razonamiento automático
Panorama del razonamiento automáticoJosé 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
 
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
 
LMF-T1: Sintaxis y semántica de la lógica proposicional
LMF-T1: Sintaxis y semántica de la lógica proposicionalLMF-T1: Sintaxis y semántica de la lógica proposicional
LMF-T1: Sintaxis y semántica de la lógica proposicionalJosé A. Alonso
 
LI-T5b: Algoritmos para SAT. Aplicaciones
LI-T5b: Algoritmos para SAT. AplicacionesLI-T5b: Algoritmos para SAT. Aplicaciones
LI-T5b: Algoritmos para SAT. AplicacionesJosé 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
 
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-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
 
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
 
LI -T5: Resolución proposicional
LI -T5: Resolución proposicionalLI -T5: Resolución proposicional
LI -T5: Resolución proposicionalJosé A. Alonso
 

Destaque (20)

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-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
 
LMF-T4: Formas normales
LMF-T4: Formas normalesLMF-T4: Formas normales
LMF-T4: Formas normales
 
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.
 
LMF-T5: Resolución proposicional
LMF-T5: Resolución proposicionalLMF-T5: Resolución proposicional
LMF-T5: Resolución proposicional
 
I1M2010-T22: Algoritmos sobre grafos en Haskell
I1M2010-T22: Algoritmos sobre grafos en HaskellI1M2010-T22: Algoritmos sobre grafos en Haskell
I1M2010-T22: Algoritmos sobre grafos en Haskell
 
Tema 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
 
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 12: Analizadores sintácticos funcionales.
Tema 12: Analizadores sintácticos funcionales.Tema 12: Analizadores sintácticos funcionales.
Tema 12: Analizadores sintácticos funcionales.
 
Panorama del razonamiento automático
Panorama del razonamiento automáticoPanorama del razonamiento automático
Panorama del razonamiento automático
 
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
 
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
 
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-T5b: Algoritmos para SAT. Aplicaciones
LI-T5b: Algoritmos para SAT. AplicacionesLI-T5b: Algoritmos para SAT. Aplicaciones
LI-T5b: Algoritmos para SAT. Aplicaciones
 
LMF-T2: Deducción natural proposicional
LMF-T2: Deducción natural proposicionalLMF-T2: Deducción natural proposicional
LMF-T2: Deducción natural proposicional
 
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-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
 
LI2011-T3: Tableros semánticos proposicionales
LI2011-T3: Tableros semánticos proposicionalesLI2011-T3: Tableros semánticos proposicionales
LI2011-T3: Tableros semánticos proposicionales
 
Haskell
HaskellHaskell
Haskell
 
LI -T5: Resolución proposicional
LI -T5: Resolución proposicionalLI -T5: Resolución proposicional
LI -T5: Resolución proposicional
 

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

Mais de José A. Alonso (7)

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

Último

4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docx
4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docx4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docx
4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docxMagalyDacostaPea
 
Contextualización y aproximación al objeto de estudio de investigación cualit...
Contextualización y aproximación al objeto de estudio de investigación cualit...Contextualización y aproximación al objeto de estudio de investigación cualit...
Contextualización y aproximación al objeto de estudio de investigación cualit...Angélica Soledad Vega Ramírez
 
Amor o egoísmo, esa es la cuestión por definir.pdf
Amor o egoísmo, esa es la cuestión por definir.pdfAmor o egoísmo, esa es la cuestión por definir.pdf
Amor o egoísmo, esa es la cuestión por definir.pdfAlejandrino Halire Ccahuana
 
PLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADO
PLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADOPLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADO
PLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADOMARIBEL DIAZ
 
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
 
describimos como son afectados las regiones naturales del peru por la ola de ...
describimos como son afectados las regiones naturales del peru por la ola de ...describimos como son afectados las regiones naturales del peru por la ola de ...
describimos como son afectados las regiones naturales del peru por la ola de ...DavidBautistaFlores1
 
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
 
LOS AMBIENTALISTAS todo por un mundo mejor
LOS AMBIENTALISTAS todo por un mundo mejorLOS AMBIENTALISTAS todo por un mundo mejor
LOS AMBIENTALISTAS todo por un mundo mejormrcrmnrojasgarcia
 
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
 
Actividades eclipse solar 2024 Educacion
Actividades eclipse solar 2024 EducacionActividades eclipse solar 2024 Educacion
Actividades eclipse solar 2024 Educacionviviantorres91
 
Secuencia didáctica.DOÑA CLEMENTINA.2024.docx
Secuencia didáctica.DOÑA CLEMENTINA.2024.docxSecuencia didáctica.DOÑA CLEMENTINA.2024.docx
Secuencia didáctica.DOÑA CLEMENTINA.2024.docxNataliaGonzalez619348
 
Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...
Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...
Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...Carol Andrea Eraso Guerrero
 
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
 
PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2
PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2
PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2Eliseo Delgado
 
Abregú, Podestá. Directores.Líderes en Acción.
Abregú, Podestá. Directores.Líderes en Acción.Abregú, Podestá. Directores.Líderes en Acción.
Abregú, Podestá. Directores.Líderes en Acción.profandrearivero
 
TEMA 13. LOS GOBIERNOS DEMOCRÁTICOS (1982-2018)
TEMA 13. LOS GOBIERNOS DEMOCRÁTICOS (1982-2018)TEMA 13. LOS GOBIERNOS DEMOCRÁTICOS (1982-2018)
TEMA 13. LOS GOBIERNOS DEMOCRÁTICOS (1982-2018)jlorentemartos
 
BITÁCORA DE ESTUDIO DE PROBLEMÁTICA. TUTORÍA V. PDF 2 UNIDAD.pdf
BITÁCORA DE ESTUDIO DE PROBLEMÁTICA. TUTORÍA V. PDF 2 UNIDAD.pdfBITÁCORA DE ESTUDIO DE PROBLEMÁTICA. TUTORÍA V. PDF 2 UNIDAD.pdf
BITÁCORA DE ESTUDIO DE PROBLEMÁTICA. TUTORÍA V. PDF 2 UNIDAD.pdfsolidalilaalvaradoro
 
PRIMER GRADO SOY LECTOR PART1- MD EDUCATIVO.pdf
PRIMER GRADO SOY LECTOR PART1- MD  EDUCATIVO.pdfPRIMER GRADO SOY LECTOR PART1- MD  EDUCATIVO.pdf
PRIMER GRADO SOY LECTOR PART1- MD EDUCATIVO.pdfGabrieldeJesusLopezG
 

Último (20)

Aedes aegypti + Intro to Coquies EE.pptx
Aedes aegypti + Intro to Coquies EE.pptxAedes aegypti + Intro to Coquies EE.pptx
Aedes aegypti + Intro to Coquies EE.pptx
 
4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docx
4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docx4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docx
4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docx
 
Contextualización y aproximación al objeto de estudio de investigación cualit...
Contextualización y aproximación al objeto de estudio de investigación cualit...Contextualización y aproximación al objeto de estudio de investigación cualit...
Contextualización y aproximación al objeto de estudio de investigación cualit...
 
Amor o egoísmo, esa es la cuestión por definir.pdf
Amor o egoísmo, esa es la cuestión por definir.pdfAmor o egoísmo, esa es la cuestión por definir.pdf
Amor o egoísmo, esa es la cuestión por definir.pdf
 
PLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADO
PLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADOPLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADO
PLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADO
 
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...
 
describimos como son afectados las regiones naturales del peru por la ola de ...
describimos como son afectados las regiones naturales del peru por la ola de ...describimos como son afectados las regiones naturales del peru por la ola de ...
describimos como son afectados las regiones naturales del peru por la ola de ...
 
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
 
LOS AMBIENTALISTAS todo por un mundo mejor
LOS AMBIENTALISTAS todo por un mundo mejorLOS AMBIENTALISTAS todo por un mundo mejor
LOS AMBIENTALISTAS todo por un mundo mejor
 
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
 
Actividades eclipse solar 2024 Educacion
Actividades eclipse solar 2024 EducacionActividades eclipse solar 2024 Educacion
Actividades eclipse solar 2024 Educacion
 
Secuencia didáctica.DOÑA CLEMENTINA.2024.docx
Secuencia didáctica.DOÑA CLEMENTINA.2024.docxSecuencia didáctica.DOÑA CLEMENTINA.2024.docx
Secuencia didáctica.DOÑA CLEMENTINA.2024.docx
 
Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...
Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...
Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...
 
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
 
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
 
PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2
PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2
PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2
 
Abregú, Podestá. Directores.Líderes en Acción.
Abregú, Podestá. Directores.Líderes en Acción.Abregú, Podestá. Directores.Líderes en Acción.
Abregú, Podestá. Directores.Líderes en Acción.
 
TEMA 13. LOS GOBIERNOS DEMOCRÁTICOS (1982-2018)
TEMA 13. LOS GOBIERNOS DEMOCRÁTICOS (1982-2018)TEMA 13. LOS GOBIERNOS DEMOCRÁTICOS (1982-2018)
TEMA 13. LOS GOBIERNOS DEMOCRÁTICOS (1982-2018)
 
BITÁCORA DE ESTUDIO DE PROBLEMÁTICA. TUTORÍA V. PDF 2 UNIDAD.pdf
BITÁCORA DE ESTUDIO DE PROBLEMÁTICA. TUTORÍA V. PDF 2 UNIDAD.pdfBITÁCORA DE ESTUDIO DE PROBLEMÁTICA. TUTORÍA V. PDF 2 UNIDAD.pdf
BITÁCORA DE ESTUDIO DE PROBLEMÁTICA. TUTORÍA V. PDF 2 UNIDAD.pdf
 
PRIMER GRADO SOY LECTOR PART1- MD EDUCATIVO.pdf
PRIMER GRADO SOY LECTOR PART1- MD  EDUCATIVO.pdfPRIMER GRADO SOY LECTOR PART1- MD  EDUCATIVO.pdf
PRIMER GRADO SOY LECTOR PART1- MD EDUCATIVO.pdf
 

I1M2010-T14: El tipo abstracto de datos de las pilas en Haskell

  • 1. Tema 14: El TAD de las pilas 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 14: El TAD de las pilas Tema 14: El TAD de las pilas 1. Tipos abstractos de datos Abstracción y tipos abstractos de datos 2. Especificación del TAD de las pilas Signatura del TAD pilas Propiedades del TAD de las pilas 3. Implementaciones del TAD de las pilas Las pilas como tipos de datos algebraicos Las pilas como listas 4. Comprobación de las implementaciones con QuickCheck Librerías auxiliares Generador de pilas Especificación de las propiedades de las pilas Comprobación de las propiedades 2 / 31
  • 3. IM Tema 14: El TAD de las pilas Tipos abstractos de datos Abstracción y tipos abstractos de datos Tema 14: El TAD de las pilas 1. Tipos abstractos de datos Abstracción y tipos abstractos de datos 2. Especificación del TAD de las pilas 3. Implementaciones del TAD de las pilas 4. Comprobación de las implementaciones con QuickCheck 3 / 31
  • 4. IM Tema 14: El TAD de las pilas Tipos abstractos de datos Abstracción y tipos abstractos de datos Abstracción y tipos abstractos de datos La abstracción es un mecanismo para comprender problemas que involucran una gran cantidad de detalles. Aspectos de la abstracción: Destacar los detalles relevantes. Ocultar los detalles irrelevantes. Un tipo abstracto de datos (TAD) es una colección de valores y operaciones que se definen mediante una especificación que es independiente de cualquier representación. Un TAD es una abstracción: Se destacan los detalles (normalmente pocos) de la especificación (el qué). Se ocultan los detalles (normalmente numerosos) de la implementación (el cómo). Analogía con las estructuras algebraicas. 4 / 31
  • 5. IM Tema 14: El TAD de las pilas Especificación del TAD de las pilas Signatura del TAD pilas Tema 14: El TAD de las pilas 1. Tipos abstractos de datos 2. Especificación del TAD de las pilas Signatura del TAD pilas Propiedades del TAD de las pilas 3. Implementaciones del TAD de las pilas 4. Comprobación de las implementaciones con QuickCheck 5 / 31
  • 6. IM Tema 14: El TAD de las pilas Especificación del TAD de las pilas Signatura del TAD pilas Descripción informal de las pilas Una pila es una estructura de datos, caracterizada por ser una secuencia de elementos en la que las operaciones de inserción de extracción se realizan por el mismo extremo. La pilas también se llaman estructuras LIFO (del inglés Last In First Out), debido a que el último elemento en entrar será el primero en salir. Analogía con las pilas de platos. 6 / 31
  • 7. IM Tema 14: El TAD de las pilas Especificación del TAD de las pilas Signatura del TAD pilas Signatura del TAD de las pilas Signatura: vacia :: Pila a apila :: a -> Pila a -> Pila a cima :: Pila a -> a desapila :: Pila a -> Pila a esVacia :: Pila a -> Bool Descripción: vacia es la pila vacía. (apila x p) es la pila obtenida añadiendo x al principio de p. (cima p) es la cima de la pila p. (desapila p) es la pila obtenida suprimiendo la cima de p. (esVacia p) se verifica si p es la pila vacía. 7 / 31
  • 8. IM Tema 14: El TAD de las pilas Especificación del TAD de las pilas Propiedades del TAD de las pilas Tema 14: El TAD de las pilas 1. Tipos abstractos de datos 2. Especificación del TAD de las pilas Signatura del TAD pilas Propiedades del TAD de las pilas 3. Implementaciones del TAD de las pilas 4. Comprobación de las implementaciones con QuickCheck 8 / 31
  • 9. IM Tema 14: El TAD de las pilas Especificación del TAD de las pilas Propiedades del TAD de las pilas Propiedades de las pilas 1. cima (apila x p) == x 2. desapila (apila x p) == p 3. esVacia vacia 4. not (esVacia (apila x p)) 9 / 31
  • 10. IM Tema 14: El TAD de las pilas Implementaciones del TAD de las pilas Las pilas como tipos de datos algebraicos Tema 14: El TAD de las pilas 1. Tipos abstractos de datos 2. Especificación del TAD de las pilas 3. Implementaciones del TAD de las pilas Las pilas como tipos de datos algebraicos Las pilas como listas 4. Comprobación de las implementaciones con QuickCheck 10 / 31
  • 11. IM Tema 14: El TAD de las pilas Implementaciones del TAD de las pilas Las pilas como tipos de datos algebraicos Las pilas mediante tipos de datos algebraicos Cabecera del módulo: module PilaConTipoDeDatoAlgebraico (Pila, vacia, -- Pila a apila, -- a -> Pila a -> Pila a cima, -- Pila a -> a desapila, -- Pila a -> Pila a esVacia -- Pila a -> Bool ) where Tipo de dato algebraico de las pilas. data Pila a = Vacia | P a (Pila a) deriving Eq 11 / 31
  • 12. IM Tema 14: El TAD de las pilas Implementaciones del TAD de las pilas Las pilas como tipos de datos algebraicos Las pilas mediante tipos de datos algebraicos Procedimiento de escritura de pilas. instance (Show a) => Show (Pila a) where showsPrec p Vacia cad = showChar '-' cad showsPrec p (P x s) cad = shows x (showChar '|' (shows s cad)) Ejemplo de pila: Definición p1 :: Pila Int p1 = apila 1 (apila 2 (apila 3 vacia)) Sesión ghci> p1 1|2|3|- 12 / 31
  • 13. IM Tema 14: El TAD de las pilas Implementaciones del TAD de las pilas Las pilas como tipos de datos algebraicos Las pilas mediante tipos de datos algebraicos vacia es la pila vacía. Por ejemplo, ghci> vacia - vacia :: Pila a vacia = Vacia (apila x p) es la pila obtenida añadiedo x encima de la pila p. Por ejemplo, apila 4 p1 => 4|1|2|3|- apila :: a -> Pila a -> Pila a apila x p = P x p 13 / 31
  • 14. IM Tema 14: El TAD de las pilas Implementaciones del TAD de las pilas Las pilas como tipos de datos algebraicos Las pilas mediante tipos de datos algebraicos (cima p) es la cima de la pila p. Por ejemplo, cima p1 == 1 cima :: Pila a -> a cima Vacia = error "cima: pila vacia" cima (P x _) = x (desapila p) es la pila obtenida suprimiendo la cima de la pila p. Por ejemplo, desapila p1 => 2|3|- desapila :: Pila a -> Pila a desapila Vacia = error "desapila: pila vacia" desapila (P _ p) = p 14 / 31
  • 15. IM Tema 14: El TAD de las pilas Implementaciones del TAD de las pilas Las pilas como tipos de datos algebraicos Las pilas mediante tipos de datos algebraicos (esVacia p) se verifica si p es la pila vacía. Por ejemplo, esVacia p1 == False esVacia vacia == True esVacia :: Pila a -> Bool esVacia Vacia = True esVacia _ = False 15 / 31
  • 16. IM Tema 14: El TAD de las pilas Implementaciones del TAD de las pilas Las pilas como listas Tema 14: El TAD de las pilas 1. Tipos abstractos de datos 2. Especificación del TAD de las pilas 3. Implementaciones del TAD de las pilas Las pilas como tipos de datos algebraicos Las pilas como listas 4. Comprobación de las implementaciones con QuickCheck 16 / 31
  • 17. IM Tema 14: El TAD de las pilas Implementaciones del TAD de las pilas Las pilas como listas Implementación de las pilas mediante listas Cabecera del módulo module PilaConListas (Pila, vacia, -- Pila a apila, -- a -> Pila a -> Pila a cima, -- Pila a -> a desapila, -- Pila a -> Pila a esVacia -- Pila a -> Bool ) where Tipo de datos de las pilas: newtype Pila a = P [a] deriving Eq 17 / 31
  • 18. IM Tema 14: El TAD de las pilas Implementaciones del TAD de las pilas Las pilas como listas Implementación de las pilas mediante listas Procedimiento de escritura de pilas. instance (Show a) => Show (Pila a) where showsPrec p (P []) cad = showChar '-' cad showsPrec p (P (x:xs)) cad = shows x (showChar '|' (shows (P xs) cad)) Ejemplo de pila: p1 es la pila obtenida anadiéndole los elementos 3, 2 y 1 a la pila vacía. Por ejemplo, ghci> p1 1|2|3|- p1 = apila 1 (apila 2 (apila 3 vacia)) 18 / 31
  • 19. IM Tema 14: El TAD de las pilas Implementaciones del TAD de las pilas Las pilas como listas Implementación de las pilas mediante listas vacia es la pila vacía. Por ejemplo, ghci> vacia - vacia :: Pila a vacia = P [] (apila x p) es la pila obtenida añadiendo x encima de la pila p. Por ejemplo, apila 4 p1 => 4|1|2|3|-| apila :: a -> Pila a -> Pila a apila x (P xs) = P (x:xs) 19 / 31
  • 20. IM Tema 14: El TAD de las pilas Implementaciones del TAD de las pilas Las pilas como listas Implementación de las pilas mediante listas (cima p) es la cima de la pila p. Por ejemplo, cima p1 == 1 cima :: Pila a -> a cima (P (x:_)) = x cima (P []) = error "cima de la pila vacia" (desapila p) es la pila obtenida suprimiendo la cima de la pila p. Por ejemplo, desapila p1 => 2|3|- desapila :: Pila a -> Pila a desapila (P []) = error "desapila la pila vacia" desapila (P (_:xs)) = P xs 20 / 31
  • 21. IM Tema 14: El TAD de las pilas Implementaciones del TAD de las pilas Las pilas como listas Implementación de las pilas mediante listas (esVacia p) se verifica si p es la pila vacía. Por ejemplo, esVacia p1 == False esVacia vacia == True esVacia :: Pila a -> Bool esVacia (P xs) = null xs 21 / 31
  • 22. IM Tema 14: El TAD de las pilas Comprobación de las implementaciones con QuickCheck Librerías auxiliares Tema 14: El TAD de las pilas 1. Tipos abstractos de datos 2. Especificación del TAD de las pilas 3. Implementaciones del TAD de las pilas 4. Comprobación de las implementaciones con QuickCheck Librerías auxiliares Generador de pilas Especificación de las propiedades de las pilas Comprobación de las propiedades 22 / 31
  • 23. IM Tema 14: El TAD de las pilas Comprobación de las implementaciones con QuickCheck Librerías auxiliares Importación de librerías Importación de la implementación de pilas que se desea comprobar. import PilaConTipoDeDatoAlgebraico -- import PilaConListas Importación de las librerías de comprobación import Test.QuickCheck import Test.Framework import Test.Framework.Providers.QuickCheck2 23 / 31
  • 24. IM Tema 14: El TAD de las pilas Comprobación de las implementaciones con QuickCheck Generador de pilas Tema 14: El TAD de las pilas 1. Tipos abstractos de datos 2. Especificación del TAD de las pilas 3. Implementaciones del TAD de las pilas 4. Comprobación de las implementaciones con QuickCheck Librerías auxiliares Generador de pilas Especificación de las propiedades de las pilas Comprobación de las propiedades 24 / 31
  • 25. IM Tema 14: El TAD de las pilas Comprobación de las implementaciones con QuickCheck Generador de pilas Generador de pilas genPila es un generador de pilas. Por ejemplo, ghci> sample genPila 0|0|- -6|4|-3|3|0|- - 9|5|-1|-3|0|-8|-5|-7|2|- ... genPila :: (Num a, Arbitrary a) => Gen (Pila a) genPila = do xs <- listOf arbitrary return (foldr apila vacia xs) instance (Arbitrary a, Num a) => Arbitrary (Pila a) where arbitrary = genPila 25 / 31
  • 26. IM Tema 14: El TAD de las pilas Comprobación de las implementaciones con QuickCheck Especificación de las propiedades de las pilas Tema 14: El TAD de las pilas 1. Tipos abstractos de datos 2. Especificación del TAD de las pilas 3. Implementaciones del TAD de las pilas 4. Comprobación de las implementaciones con QuickCheck Librerías auxiliares Generador de pilas Especificación de las propiedades de las pilas Comprobación de las propiedades 26 / 31
  • 27. IM Tema 14: El TAD de las pilas Comprobación de las implementaciones con QuickCheck Especificación de las propiedades de las pilas Especificación de las propiedades de pilas La cima de la pila que resulta de añadir x a la pila p es x. prop_cima_apila :: Int -> Pila Int -> Bool prop_cima_apila x p = cima (apila x p) == x La pila que resulta de desapilar después de añadir cualquier elemento a una pila p es p. prop_desapila_apila :: Int -> Pila Int -> Bool prop_desapila_apila x p = desapila (apila x p) == p 27 / 31
  • 28. IM Tema 14: El TAD de las pilas Comprobación de las implementaciones con QuickCheck Especificación de las propiedades de las pilas Especificación de las propiedades de pila La pila vacía está vacía. prop_vacia_esta_vacia :: Bool prop_vacia_esta_vacia = esVacia vacia La pila que resulta de añadir un elemento en un pila cualquiera no es vacía. prop_apila_no_es_vacia :: Int -> Pila Int -> Bool prop_apila_no_es_vacia x p = not (esVacia (apila x p)) 28 / 31
  • 29. IM Tema 14: El TAD de las pilas Comprobación de las implementaciones con QuickCheck Comprobación de las propiedades Tema 14: El TAD de las pilas 1. Tipos abstractos de datos 2. Especificación del TAD de las pilas 3. Implementaciones del TAD de las pilas 4. Comprobación de las implementaciones con QuickCheck Librerías auxiliares Generador de pilas Especificación de las propiedades de las pilas Comprobación de las propiedades 29 / 31
  • 30. IM Tema 14: El TAD de las pilas 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 pilas" [testProperty "P1" prop_cima_apila, testProperty "P2" prop_desapila_apila, testProperty "P3" prop_vacia_esta_vacia, testProperty "P4" prop_apila_no_es_vacia]] 30 / 31
  • 31. IM Tema 14: El TAD de las pilas Comprobación de las implementaciones con QuickCheck Comprobación de las propiedades Comprobación de las propiedades de las pilas ghci> compruebaPropiedades Propiedades del TAD pilas: P1: [OK, passed 100 tests] P2: [OK, passed 100 tests] P3: [OK, passed 100 tests] P4: [OK, passed 100 tests] Properties Total Passed 4 4 Failed 0 0 Total 4 4 31 / 31