tema 14: el tad de las pilas - informática (2019 20)jalonso/cursos/i1m-19/temas/tema-14.pdf ·...

45
Tema 14: El TAD de las pilas Informática (2019–20) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla

Upload: others

Post on 07-May-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Tema 14: El TAD de las pilas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-14.pdf · IMTema14: ElTADdelaspilas Tema14:ElTADdelaspilas 1.Tiposabstractosdedatos Abstracciónytiposabstractosdedatos

Tema 14: El TAD de las pilasInformática (2019–20)

José A. Alonso Jiménez

Grupo de Lógica ComputacionalDepartamento de Ciencias de la Computación e I.A.

Universidad de Sevilla

Page 2: Tema 14: El TAD de las pilas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-14.pdf · IMTema14: ElTADdelaspilas Tema14:ElTADdelaspilas 1.Tiposabstractosdedatos Abstracciónytiposabstractosdedatos

IM Tema 14: El TAD de las pilas

Tema 14: El TAD de las pilas1. Tipos abstractos de datos

Abstracción y tipos abstractos de datos2. Especificación del TAD de las pilas

Signatura del TAD pilasPropiedades del TAD de las pilas

3. Implementaciones del TAD de las pilasLas pilas como tipos de datos algebraicosLas pilas como listas

4. Comprobación de las implementaciones con QuickCheckLibrerías auxiliaresGenerador de pilasEspecificación de las propiedades de las pilasComprobación de las propiedades

2 / 31

Page 3: Tema 14: El TAD de las pilas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-14.pdf · IMTema14: ElTADdelaspilas Tema14:ElTADdelaspilas 1.Tiposabstractosdedatos Abstracciónytiposabstractosdedatos

IM Tema 14: El TAD de las pilasTipos abstractos de datos

Abstracción y tipos abstractos de datos

Tema 14: El TAD de las pilas

1. Tipos abstractos de datosAbstracció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

Page 4: Tema 14: El TAD de las pilas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-14.pdf · IMTema14: ElTADdelaspilas Tema14:ElTADdelaspilas 1.Tiposabstractosdedatos Abstracciónytiposabstractosdedatos

IM Tema 14: El TAD de las pilasTipos abstractos de datos

Abstracción y tipos abstractos de datos

Abstracción y tipos abstractos de datosI La abstracción es un mecanismo para comprender problemas

que involucran una gran cantidad de detalles.I Aspectos de la abstracción:

I Destacar los detalles relevantes.I Ocultar los detalles irrelevantes.

I Un tipo abstracto de datos (TAD) es una colección de valoresy operaciones que se definen mediante una especificación que esindependiente de cualquier representación.

I Un TAD es una abstracción:I Se destacan los detalles (normalmente pocos) de la especificación

(el qué).I Se ocultan los detalles (normalmente numerosos) de la

implementación (el cómo).I Analogía con las estructuras algebraicas.

4 / 31

Page 5: Tema 14: El TAD de las pilas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-14.pdf · IMTema14: ElTADdelaspilas Tema14:ElTADdelaspilas 1.Tiposabstractosdedatos Abstracciónytiposabstractosdedatos

IM Tema 14: El TAD de las pilasEspecificació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 pilasSignatura del TAD pilasPropiedades del TAD de las pilas

3. Implementaciones del TAD de las pilas

4. Comprobación de las implementaciones con QuickCheck

5 / 31

Page 6: Tema 14: El TAD de las pilas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-14.pdf · IMTema14: ElTADdelaspilas Tema14:ElTADdelaspilas 1.Tiposabstractosdedatos Abstracciónytiposabstractosdedatos

IM Tema 14: El TAD de las pilasEspecificación del TAD de las pilas

Signatura del TAD pilas

Descripción informal de las pilas

I Una pila es una estructura de datos, caracterizada por ser unasecuencia de elementos en la que las operaciones de inserción yextracción se realizan por el mismo extremo.

I La pilas también se llaman estructuras LIFO (del inglés Last InFirst Out), debido a que el último elemento en entrar será elprimero en salir.

I Analogía con las pilas de platos.

6 / 31

Page 7: Tema 14: El TAD de las pilas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-14.pdf · IMTema14: ElTADdelaspilas Tema14:ElTADdelaspilas 1.Tiposabstractosdedatos Abstracciónytiposabstractosdedatos

IM Tema 14: El TAD de las pilasEspecificación del TAD de las pilas

Signatura del TAD pilas

Signatura del TAD de las pilas

I Signatura:vacia :: Pila aapila :: a -> Pila a -> Pila acima :: Pila a -> adesapila :: Pila a -> Pila aesVacia :: Pila a -> Bool

I Descripción:I vacia es la pila vacía.I (apila x p) es la pila obtenida añadiendo x al principio de p.I (cima p) es la cima de la pila p.I (desapila p) es la pila obtenida suprimiendo la cima de p.I (esVacia p) se verifica si p es la pila vacía.

7 / 31

Page 8: Tema 14: El TAD de las pilas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-14.pdf · IMTema14: ElTADdelaspilas Tema14:ElTADdelaspilas 1.Tiposabstractosdedatos Abstracciónytiposabstractosdedatos

IM Tema 14: El TAD de las pilasEspecificació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 pilasSignatura del TAD pilasPropiedades del TAD de las pilas

3. Implementaciones del TAD de las pilas

4. Comprobación de las implementaciones con QuickCheck

8 / 31

Page 9: Tema 14: El TAD de las pilas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-14.pdf · IMTema14: ElTADdelaspilas Tema14:ElTADdelaspilas 1.Tiposabstractosdedatos Abstracciónytiposabstractosdedatos

IM Tema 14: El TAD de las pilasEspecificació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

Page 10: Tema 14: El TAD de las pilas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-14.pdf · IMTema14: ElTADdelaspilas Tema14:ElTADdelaspilas 1.Tiposabstractosdedatos Abstracciónytiposabstractosdedatos

IM Tema 14: El TAD de las pilasImplementaciones 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 pilasLas pilas como tipos de datos algebraicosLas pilas como listas

4. Comprobación de las implementaciones con QuickCheck

10 / 31

Page 11: Tema 14: El TAD de las pilas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-14.pdf · IMTema14: ElTADdelaspilas Tema14:ElTADdelaspilas 1.Tiposabstractosdedatos Abstracciónytiposabstractosdedatos

IM Tema 14: El TAD de las pilasImplementaciones del TAD de las pilas

Las pilas como tipos de datos algebraicos

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

module PilaConTipoDeDatoAlgebraico(Pila,vacia, -- Pila aapila, -- a -> Pila a -> Pila acima, -- Pila a -> adesapila, -- Pila a -> Pila aesVacia -- Pila a -> Bool

) where

I Tipo de dato algebraico de las pilas.

data Pila a = Vacia | P a (Pila a)deriving Eq

11 / 31

Page 12: Tema 14: El TAD de las pilas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-14.pdf · IMTema14: ElTADdelaspilas Tema14:ElTADdelaspilas 1.Tiposabstractosdedatos Abstracciónytiposabstractosdedatos

IM Tema 14: El TAD de las pilasImplementaciones del TAD de las pilas

Las pilas como tipos de datos algebraicos

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

instance (Show a) => Show (Pila a) whereshowsPrec p Vacia cad = showChar ’-’ cadshowsPrec p (P x s) cad =

shows x (showChar ’|’ (shows s cad))

I Ejemplo de pila:I Definición

p1 :: Pila Intp1 = apila 1 (apila 2 (apila 3 vacia))

I Sesiónghci> p11|2|3|-

12 / 31

Page 13: Tema 14: El TAD de las pilas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-14.pdf · IMTema14: ElTADdelaspilas Tema14:ElTADdelaspilas 1.Tiposabstractosdedatos Abstracciónytiposabstractosdedatos

IM Tema 14: El TAD de las pilasImplementaciones del TAD de las pilas

Las pilas como tipos de datos algebraicos

Las pilas mediante tipos de datos algebraicosI vacia es la pila vacía. Por ejemplo,

ghci> vacia-

vacia :: Pila avacia = Vacia

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

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

13 / 31

Page 14: Tema 14: El TAD de las pilas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-14.pdf · IMTema14: ElTADdelaspilas Tema14:ElTADdelaspilas 1.Tiposabstractosdedatos Abstracciónytiposabstractosdedatos

IM Tema 14: El TAD de las pilasImplementaciones del TAD de las pilas

Las pilas como tipos de datos algebraicos

Las pilas mediante tipos de datos algebraicosI vacia es la pila vacía. Por ejemplo,

ghci> vacia-

vacia :: Pila avacia = Vacia

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

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

13 / 31

Page 15: Tema 14: El TAD de las pilas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-14.pdf · IMTema14: ElTADdelaspilas Tema14:ElTADdelaspilas 1.Tiposabstractosdedatos Abstracciónytiposabstractosdedatos

IM Tema 14: El TAD de las pilasImplementaciones del TAD de las pilas

Las pilas como tipos de datos algebraicos

Las pilas mediante tipos de datos algebraicosI vacia es la pila vacía. Por ejemplo,

ghci> vacia-

vacia :: Pila avacia = Vacia

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

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

13 / 31

Page 16: Tema 14: El TAD de las pilas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-14.pdf · IMTema14: ElTADdelaspilas Tema14:ElTADdelaspilas 1.Tiposabstractosdedatos Abstracciónytiposabstractosdedatos

IM Tema 14: El TAD de las pilasImplementaciones del TAD de las pilas

Las pilas como tipos de datos algebraicos

Las pilas mediante tipos de datos algebraicosI (cima p) es la cima de la pila p. Por ejemplo,

cima p1 == 1

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

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

desapila :: Pila a -> Pila adesapila Vacia = error "desapila: pila vacia"desapila (P _ p) = p

14 / 31

Page 17: Tema 14: El TAD de las pilas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-14.pdf · IMTema14: ElTADdelaspilas Tema14:ElTADdelaspilas 1.Tiposabstractosdedatos Abstracciónytiposabstractosdedatos

IM Tema 14: El TAD de las pilasImplementaciones del TAD de las pilas

Las pilas como tipos de datos algebraicos

Las pilas mediante tipos de datos algebraicosI (cima p) es la cima de la pila p. Por ejemplo,

cima p1 == 1

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

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

desapila :: Pila a -> Pila adesapila Vacia = error "desapila: pila vacia"desapila (P _ p) = p

14 / 31

Page 18: Tema 14: El TAD de las pilas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-14.pdf · IMTema14: ElTADdelaspilas Tema14:ElTADdelaspilas 1.Tiposabstractosdedatos Abstracciónytiposabstractosdedatos

IM Tema 14: El TAD de las pilasImplementaciones del TAD de las pilas

Las pilas como tipos de datos algebraicos

Las pilas mediante tipos de datos algebraicosI (cima p) es la cima de la pila p. Por ejemplo,

cima p1 == 1

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

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

desapila :: Pila a -> Pila adesapila Vacia = error "desapila: pila vacia"desapila (P _ p) = p

14 / 31

Page 19: Tema 14: El TAD de las pilas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-14.pdf · IMTema14: ElTADdelaspilas Tema14:ElTADdelaspilas 1.Tiposabstractosdedatos Abstracciónytiposabstractosdedatos

IM Tema 14: El TAD de las pilasImplementaciones del TAD de las pilas

Las pilas como tipos de datos algebraicos

Las pilas mediante tipos de datos algebraicos

I (esVacia p) se verifica si p es la pila vacía. Por ejemplo,esVacia p1 == FalseesVacia vacia == True

esVacia :: Pila a -> BoolesVacia Vacia = TrueesVacia _ = False

15 / 31

Page 20: Tema 14: El TAD de las pilas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-14.pdf · IMTema14: ElTADdelaspilas Tema14:ElTADdelaspilas 1.Tiposabstractosdedatos Abstracciónytiposabstractosdedatos

IM Tema 14: El TAD de las pilasImplementaciones del TAD de las pilas

Las pilas como tipos de datos algebraicos

Las pilas mediante tipos de datos algebraicos

I (esVacia p) se verifica si p es la pila vacía. Por ejemplo,esVacia p1 == FalseesVacia vacia == True

esVacia :: Pila a -> BoolesVacia Vacia = TrueesVacia _ = False

15 / 31

Page 21: Tema 14: El TAD de las pilas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-14.pdf · IMTema14: ElTADdelaspilas Tema14:ElTADdelaspilas 1.Tiposabstractosdedatos Abstracciónytiposabstractosdedatos

IM Tema 14: El TAD de las pilasImplementaciones 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 pilasLas pilas como tipos de datos algebraicosLas pilas como listas

4. Comprobación de las implementaciones con QuickCheck

16 / 31

Page 22: Tema 14: El TAD de las pilas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-14.pdf · IMTema14: ElTADdelaspilas Tema14:ElTADdelaspilas 1.Tiposabstractosdedatos Abstracciónytiposabstractosdedatos

IM Tema 14: El TAD de las pilasImplementaciones del TAD de las pilas

Las pilas como listas

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

module PilaConListas(Pila,vacia, -- Pila aapila, -- a -> Pila a -> Pila acima, -- Pila a -> adesapila, -- Pila a -> Pila aesVacia -- Pila a -> Bool

) where

I Tipo de datos de las pilas:

newtype Pila a = P [a]deriving Eq

17 / 31

Page 23: Tema 14: El TAD de las pilas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-14.pdf · IMTema14: ElTADdelaspilas Tema14:ElTADdelaspilas 1.Tiposabstractosdedatos Abstracciónytiposabstractosdedatos

IM Tema 14: El TAD de las pilasImplementaciones del TAD de las pilas

Las pilas como listas

Implementación de las pilas mediante listas

I Procedimiento de escritura de pilas.

instance (Show a) => Show (Pila a) whereshowsPrec p (P []) cad = showChar ’-’ cadshowsPrec p (P (x:xs)) cad

= shows x (showChar ’|’ (shows (P xs) cad))

I Ejemplo de pila: p1 es la pila obtenida anadiéndole los elementos3, 2 y 1 a la pila vacía. Por ejemplo,ghci> p11|2|3|-

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

18 / 31

Page 24: Tema 14: El TAD de las pilas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-14.pdf · IMTema14: ElTADdelaspilas Tema14:ElTADdelaspilas 1.Tiposabstractosdedatos Abstracciónytiposabstractosdedatos

IM Tema 14: El TAD de las pilasImplementaciones del TAD de las pilas

Las pilas como listas

Implementación de las pilas mediante listas

I vacia es la pila vacía. Por ejemplo,ghci> vacia-

vacia :: Pila avacia = P []

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

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

19 / 31

Page 25: Tema 14: El TAD de las pilas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-14.pdf · IMTema14: ElTADdelaspilas Tema14:ElTADdelaspilas 1.Tiposabstractosdedatos Abstracciónytiposabstractosdedatos

IM Tema 14: El TAD de las pilasImplementaciones del TAD de las pilas

Las pilas como listas

Implementación de las pilas mediante listas

I vacia es la pila vacía. Por ejemplo,ghci> vacia-

vacia :: Pila avacia = P []

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

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

19 / 31

Page 26: Tema 14: El TAD de las pilas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-14.pdf · IMTema14: ElTADdelaspilas Tema14:ElTADdelaspilas 1.Tiposabstractosdedatos Abstracciónytiposabstractosdedatos

IM Tema 14: El TAD de las pilasImplementaciones del TAD de las pilas

Las pilas como listas

Implementación de las pilas mediante listas

I vacia es la pila vacía. Por ejemplo,ghci> vacia-

vacia :: Pila avacia = P []

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

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

19 / 31

Page 27: Tema 14: El TAD de las pilas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-14.pdf · IMTema14: ElTADdelaspilas Tema14:ElTADdelaspilas 1.Tiposabstractosdedatos Abstracciónytiposabstractosdedatos

IM Tema 14: El TAD de las pilasImplementaciones del TAD de las pilas

Las pilas como listas

Implementación de las pilas mediante listasI (cima p) es la cima de la pila p. Por ejemplo,

cima p1 == 1

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

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

desapila :: Pila a -> Pila adesapila (P []) = error "desapila la pila vacia"desapila (P (_:xs)) = P xs

20 / 31

Page 28: Tema 14: El TAD de las pilas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-14.pdf · IMTema14: ElTADdelaspilas Tema14:ElTADdelaspilas 1.Tiposabstractosdedatos Abstracciónytiposabstractosdedatos

IM Tema 14: El TAD de las pilasImplementaciones del TAD de las pilas

Las pilas como listas

Implementación de las pilas mediante listasI (cima p) es la cima de la pila p. Por ejemplo,

cima p1 == 1

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

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

desapila :: Pila a -> Pila adesapila (P []) = error "desapila la pila vacia"desapila (P (_:xs)) = P xs

20 / 31

Page 29: Tema 14: El TAD de las pilas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-14.pdf · IMTema14: ElTADdelaspilas Tema14:ElTADdelaspilas 1.Tiposabstractosdedatos Abstracciónytiposabstractosdedatos

IM Tema 14: El TAD de las pilasImplementaciones del TAD de las pilas

Las pilas como listas

Implementación de las pilas mediante listasI (cima p) es la cima de la pila p. Por ejemplo,

cima p1 == 1

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

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

desapila :: Pila a -> Pila adesapila (P []) = error "desapila la pila vacia"desapila (P (_:xs)) = P xs

20 / 31

Page 30: Tema 14: El TAD de las pilas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-14.pdf · IMTema14: ElTADdelaspilas Tema14:ElTADdelaspilas 1.Tiposabstractosdedatos Abstracciónytiposabstractosdedatos

IM Tema 14: El TAD de las pilasImplementaciones del TAD de las pilas

Las pilas como listas

Implementación de las pilas mediante listas

I (esVacia p) se verifica si p es la pila vacía. Por ejemplo,esVacia p1 == FalseesVacia vacia == True

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

21 / 31

Page 31: Tema 14: El TAD de las pilas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-14.pdf · IMTema14: ElTADdelaspilas Tema14:ElTADdelaspilas 1.Tiposabstractosdedatos Abstracciónytiposabstractosdedatos

IM Tema 14: El TAD de las pilasImplementaciones del TAD de las pilas

Las pilas como listas

Implementación de las pilas mediante listas

I (esVacia p) se verifica si p es la pila vacía. Por ejemplo,esVacia p1 == FalseesVacia vacia == True

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

21 / 31

Page 32: Tema 14: El TAD de las pilas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-14.pdf · IMTema14: ElTADdelaspilas Tema14:ElTADdelaspilas 1.Tiposabstractosdedatos Abstracciónytiposabstractosdedatos

IM Tema 14: El TAD de las pilasComprobació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 QuickCheckLibrerías auxiliaresGenerador de pilasEspecificación de las propiedades de las pilasComprobación de las propiedades

22 / 31

Page 33: Tema 14: El TAD de las pilas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-14.pdf · IMTema14: ElTADdelaspilas Tema14:ElTADdelaspilas 1.Tiposabstractosdedatos Abstracciónytiposabstractosdedatos

IM Tema 14: El TAD de las pilasComprobación de las implementaciones con QuickCheck

Librerías auxiliares

Importación de librerías

I Importación de la implementación de pilas que se deseacomprobar.

import PilaConTipoDeDatoAlgebraico-- import PilaConListas

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

import Test.QuickCheckimport Test.Frameworkimport Test.Framework.Providers.QuickCheck2

23 / 31

Page 34: Tema 14: El TAD de las pilas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-14.pdf · IMTema14: ElTADdelaspilas Tema14:ElTADdelaspilas 1.Tiposabstractosdedatos Abstracciónytiposabstractosdedatos

IM Tema 14: El TAD de las pilasComprobació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 QuickCheckLibrerías auxiliaresGenerador de pilasEspecificación de las propiedades de las pilasComprobación de las propiedades

24 / 31

Page 35: Tema 14: El TAD de las pilas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-14.pdf · IMTema14: ElTADdelaspilas Tema14:ElTADdelaspilas 1.Tiposabstractosdedatos Abstracciónytiposabstractosdedatos

IM Tema 14: El TAD de las pilasComprobación de las implementaciones con QuickCheck

Generador de pilas

Generador de pilasI genPila es un generador de pilas. Por ejemplo,

ghci> sample genPila0|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) wherearbitrary = genPila

25 / 31

Page 36: Tema 14: El TAD de las pilas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-14.pdf · IMTema14: ElTADdelaspilas Tema14:ElTADdelaspilas 1.Tiposabstractosdedatos Abstracciónytiposabstractosdedatos

IM Tema 14: El TAD de las pilasComprobació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 QuickCheckLibrerías auxiliaresGenerador de pilasEspecificación de las propiedades de las pilasComprobación de las propiedades

26 / 31

Page 37: Tema 14: El TAD de las pilas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-14.pdf · IMTema14: ElTADdelaspilas Tema14:ElTADdelaspilas 1.Tiposabstractosdedatos Abstracciónytiposabstractosdedatos

IM Tema 14: El TAD de las pilasComprobación de las implementaciones con QuickCheck

Especificación de las propiedades de las pilas

Especificación de las propiedades de pilas

I La cima de la pila que resulta de añadir x a la pila p es x.

prop_cima_apila :: Int -> Pila Int -> Boolprop_cima_apila x p =

cima (apila x p) == x

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

prop_desapila_apila :: Int -> Pila Int -> Boolprop_desapila_apila x p =

desapila (apila x p) == p

27 / 31

Page 38: Tema 14: El TAD de las pilas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-14.pdf · IMTema14: ElTADdelaspilas Tema14:ElTADdelaspilas 1.Tiposabstractosdedatos Abstracciónytiposabstractosdedatos

IM Tema 14: El TAD de las pilasComprobación de las implementaciones con QuickCheck

Especificación de las propiedades de las pilas

Especificación de las propiedades de pilas

I La cima de la pila que resulta de añadir x a la pila p es x.

prop_cima_apila :: Int -> Pila Int -> Boolprop_cima_apila x p =

cima (apila x p) == x

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

prop_desapila_apila :: Int -> Pila Int -> Boolprop_desapila_apila x p =

desapila (apila x p) == p

27 / 31

Page 39: Tema 14: El TAD de las pilas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-14.pdf · IMTema14: ElTADdelaspilas Tema14:ElTADdelaspilas 1.Tiposabstractosdedatos Abstracciónytiposabstractosdedatos

IM Tema 14: El TAD de las pilasComprobación de las implementaciones con QuickCheck

Especificación de las propiedades de las pilas

Especificación de las propiedades de pilas

I La cima de la pila que resulta de añadir x a la pila p es x.

prop_cima_apila :: Int -> Pila Int -> Boolprop_cima_apila x p =

cima (apila x p) == x

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

prop_desapila_apila :: Int -> Pila Int -> Boolprop_desapila_apila x p =

desapila (apila x p) == p

27 / 31

Page 40: Tema 14: El TAD de las pilas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-14.pdf · IMTema14: ElTADdelaspilas Tema14:ElTADdelaspilas 1.Tiposabstractosdedatos Abstracciónytiposabstractosdedatos

IM Tema 14: El TAD de las pilasComprobación de las implementaciones con QuickCheck

Especificación de las propiedades de las pilas

Especificación de las propiedades de pila

I La pila vacía está vacía.

prop_vacia_esta_vacia :: Boolprop_vacia_esta_vacia =

esVacia vacia

I La pila que resulta de añadir un elemento en un pila cualquierano es vacía.

prop_apila_no_es_vacia :: Int -> Pila Int -> Boolprop_apila_no_es_vacia x p =

not (esVacia (apila x p))

28 / 31

Page 41: Tema 14: El TAD de las pilas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-14.pdf · IMTema14: ElTADdelaspilas Tema14:ElTADdelaspilas 1.Tiposabstractosdedatos Abstracciónytiposabstractosdedatos

IM Tema 14: El TAD de las pilasComprobación de las implementaciones con QuickCheck

Especificación de las propiedades de las pilas

Especificación de las propiedades de pila

I La pila vacía está vacía.

prop_vacia_esta_vacia :: Boolprop_vacia_esta_vacia =

esVacia vacia

I La pila que resulta de añadir un elemento en un pila cualquierano es vacía.

prop_apila_no_es_vacia :: Int -> Pila Int -> Boolprop_apila_no_es_vacia x p =

not (esVacia (apila x p))

28 / 31

Page 42: Tema 14: El TAD de las pilas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-14.pdf · IMTema14: ElTADdelaspilas Tema14:ElTADdelaspilas 1.Tiposabstractosdedatos Abstracciónytiposabstractosdedatos

IM Tema 14: El TAD de las pilasComprobación de las implementaciones con QuickCheck

Especificación de las propiedades de las pilas

Especificación de las propiedades de pila

I La pila vacía está vacía.

prop_vacia_esta_vacia :: Boolprop_vacia_esta_vacia =

esVacia vacia

I La pila que resulta de añadir un elemento en un pila cualquierano es vacía.

prop_apila_no_es_vacia :: Int -> Pila Int -> Boolprop_apila_no_es_vacia x p =

not (esVacia (apila x p))

28 / 31

Page 43: Tema 14: El TAD de las pilas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-14.pdf · IMTema14: ElTADdelaspilas Tema14:ElTADdelaspilas 1.Tiposabstractosdedatos Abstracciónytiposabstractosdedatos

IM Tema 14: El TAD de las pilasComprobació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 QuickCheckLibrerías auxiliaresGenerador de pilasEspecificación de las propiedades de las pilasComprobación de las propiedades

29 / 31

Page 44: Tema 14: El TAD de las pilas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-14.pdf · IMTema14: ElTADdelaspilas Tema14:ElTADdelaspilas 1.Tiposabstractosdedatos Abstracciónytiposabstractosdedatos

IM Tema 14: El TAD de las pilasComprobación de las implementaciones con QuickCheck

Comprobación de las propiedades

Definición del procedimiento de comprobación

I compruebaPropiedades comprueba todas las propiedades con laplataforma 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

Page 45: Tema 14: El TAD de las pilas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-14.pdf · IMTema14: ElTADdelaspilas Tema14:ElTADdelaspilas 1.Tiposabstractosdedatos Abstracciónytiposabstractosdedatos

IM Tema 14: El TAD de las pilasComprobación de las implementaciones con QuickCheck

Comprobación de las propiedades

Comprobación de las propiedades de las pilas

ghci> compruebaPropiedadesPropiedades del TAD pilas:

P1: [OK, passed 100 tests]P2: [OK, passed 100 tests]P3: [OK, passed 100 tests]P4: [OK, passed 100 tests]

Properties TotalPassed 4 4Failed 0 0Total 4 4

31 / 31