Se especifica el tipo abstracto de datos de las pilas, se presentan implementaciones en Haskell y se comprueban sus propiedades características con QuickCheck.
Este es el 14º tema del curso de introducción a Haskell. El código y los restantes temas se encuentran en http://www.cs.us.es/~jalonso/cursos/i1m-10/temas.html
I1M2010-T16: El tipo abstracto de las colas de prioridad en HaskellJosé A. Alonso
Se especifica el tipo abstracto de datos de las colas de prioridad, se presenta su implementación en Haskell mediante listas y se comprueban sus propiedades características con QuickCheck.
Este es el tema 16 del curso de introducción a Haskell. El código y los restantes temas se encuentran en http://www.cs.us.es/~jalonso/cursos/i1m-10/temas.html
I1M-T21: El TAD de los polinomios en HaskellJosé A. Alonso
Se presenta el tipo abstracto (TAD) de los polinomios y se estudia tres implementaciones en Haskell (mediante tipos algebraicos, listas dispersas y listas densas). Además se comprueba con QUickCheck sus propiedades. Finalmente, se definen las operaciones con los polinomios mediante el TAD.
Este es el tema 21 del curso de introducción a Haskell. El código y los restantes temas se encuentran en http://www.cs.us.es/~jalonso/cursos/i1m/temas.html
I1M2010-T15: El tipo abstracto de datos de las colas en HaskellJosé A. Alonso
Se especifica el tipo abstracto de datos de las colas, se presentan implementaciones en Haskell y se comprueban sus propiedades características con QuickCheck.
Este es el 15º tema del curso de introducción a Haskell. El código y los restantes temas se encuentran en http://www.cs.us.es/~jalonso/cursos/i1m-10/temas.html
I1M2010-T18: El TAD de las tablas en HaskellJosé A. Alonso
Se introduce el módulo de tablas (Data.Array) de Haskell, se especifica el tipo abstracto de datos de las tablas, se presentan distintas implementaciones en Haskell y se comprueban sus propiedades características con QuickCheck.
Este es el tema 18 del curso de introducción a Haskell. El código y los restantes temas se encuentran en http://www.cs.us.es/~jalonso/cursos/i1m-10/temas.html
I1M2010-T16: El tipo abstracto de las colas de prioridad en HaskellJosé A. Alonso
Se especifica el tipo abstracto de datos de las colas de prioridad, se presenta su implementación en Haskell mediante listas y se comprueban sus propiedades características con QuickCheck.
Este es el tema 16 del curso de introducción a Haskell. El código y los restantes temas se encuentran en http://www.cs.us.es/~jalonso/cursos/i1m-10/temas.html
I1M-T21: El TAD de los polinomios en HaskellJosé A. Alonso
Se presenta el tipo abstracto (TAD) de los polinomios y se estudia tres implementaciones en Haskell (mediante tipos algebraicos, listas dispersas y listas densas). Además se comprueba con QUickCheck sus propiedades. Finalmente, se definen las operaciones con los polinomios mediante el TAD.
Este es el tema 21 del curso de introducción a Haskell. El código y los restantes temas se encuentran en http://www.cs.us.es/~jalonso/cursos/i1m/temas.html
I1M2010-T15: El tipo abstracto de datos de las colas en HaskellJosé A. Alonso
Se especifica el tipo abstracto de datos de las colas, se presentan implementaciones en Haskell y se comprueban sus propiedades características con QuickCheck.
Este es el 15º tema del curso de introducción a Haskell. El código y los restantes temas se encuentran en http://www.cs.us.es/~jalonso/cursos/i1m-10/temas.html
I1M2010-T18: El TAD de las tablas en HaskellJosé A. Alonso
Se introduce el módulo de tablas (Data.Array) de Haskell, se especifica el tipo abstracto de datos de las tablas, se presentan distintas implementaciones en Haskell y se comprueban sus propiedades características con QuickCheck.
Este es el tema 18 del curso de introducción a Haskell. El código y los restantes temas se encuentran en http://www.cs.us.es/~jalonso/cursos/i1m-10/temas.html
I1M2010-T20: El tipo abstracto de los montículos en Haskell José A. Alonso
Se especifica el tipo abstracto de datos de los montículos, se presenta su implementación en Haskell mediante tipo de datos algebraico y se comprueban sus propiedades características con QuickCheck.
Este es el tema 20 del curso de introducción a Haskell. El código y los restantes temas se encuentran en http://www.cs.us.es/~jalonso/cursos/i1m-10/temas.html
I1M2010-T23: Técnicas de diseño descendente de algoritmos.José A. Alonso
Se implementan en Haskell los patrones de divide y vencerás y de búsqueda en espacios de estados. Se aplica los patrones a la ordenación por mezcla, ordenación rápida, 8-puzzle y a los problemas de de las N reinas, de la mochila y del cambio de monedas.
Este es el tema 23 del curso de introducción a Haskell. El código y los restantes temas se encuentran en http://www.cs.us.es/~jalonso/cursos/i1m-10/temas.html
I1M2010-T22: Algoritmos sobre grafos en HaskellJosé A. Alonso
Se especifica el tipo abstracto de datos de las grafos, se presentan 2 implementaciones en Haskell del TAD y se estudia los algoritmos de recorrido en profundidad y en anchura y el algoritmo de Prim.
Este es el tema 22 del curso de introducción a Haskell. El código y los restantes temas se encuentran en http://www.cs.us.es/~jalonso/cursos/i1m-10/temas.html
Tema 2: Introducción a la programación con HaskellJosé A. Alonso
Se introduce el uso de GHC dentro de emacs.
Este es el 2º tema del curso de introducción a Haskell. El código y los restantes temas se encuentran en http://www.cs.us.es/~jalonso/cursos/i1m/temas.html
Se presentan las estrategias de computación perezosa e impaciente y se muestra cómo Haskell usa la perezosa lo que permite trabajar con objetos infinitos. También se muestra cómo puede hacerse evaluaciones estrictas en Haskell.
Este es el 10º tema del curso de introducción a Haskell. El código y los restantes temas se encuentran en http://www.cs.us.es/~jalonso/cursos/i1m-10/temas.html
LMF-T1: Sintaxis y semántica de la lógica proposicionalJosé A. Alonso
Introducción a la sintaxis y a la semántica de la lógica proposicional.
Este es el tema 1 del curso "Lógica matemática y fundamentos" http://www.cs.us.es/~jalonso/cursos/lmf
Se presentan el algoritmo de DPLL para decir la conjuntos de cláusulas y ejemplos de planteamiento y solución de problemas lógicos con Prover9 y Mace4.
LI2011-T11: Resolución en lógica de primer ordenJosé A. Alonso
Se presentan los algoritmos de unificación y resolución en lógica de primer orden.
Este es el tema 11 del curso de "Lógica informática". Más temas en http://www.cs.us.es/~jalonso/cursos/li/tema
LI2011-T7: Deducción natural en lógica de primer ordenJosé A. Alonso
Se presenta la deducción natural para la lógica de primer orden como ampliación de la presentada en el tema 2 de deducción natural proposicional.
Este es el tema 7 del curso de "Lógica informática". Más temas en http://www.cs.us.es/~jalonso/cursos/li/temas.html
LI2011-T3: Tableros semánticos proposicionalesJosé A. Alonso
Se presenta los tableros semánticos como sistema deductivo de la lógica proposicional.
Este es el tema 3 del curso de "Lógica informática". Más temas en http://www.cs.us.es/~jalonso/cursos/li/temas.html
I1M2010-T20: El tipo abstracto de los montículos en Haskell José A. Alonso
Se especifica el tipo abstracto de datos de los montículos, se presenta su implementación en Haskell mediante tipo de datos algebraico y se comprueban sus propiedades características con QuickCheck.
Este es el tema 20 del curso de introducción a Haskell. El código y los restantes temas se encuentran en http://www.cs.us.es/~jalonso/cursos/i1m-10/temas.html
I1M2010-T23: Técnicas de diseño descendente de algoritmos.José A. Alonso
Se implementan en Haskell los patrones de divide y vencerás y de búsqueda en espacios de estados. Se aplica los patrones a la ordenación por mezcla, ordenación rápida, 8-puzzle y a los problemas de de las N reinas, de la mochila y del cambio de monedas.
Este es el tema 23 del curso de introducción a Haskell. El código y los restantes temas se encuentran en http://www.cs.us.es/~jalonso/cursos/i1m-10/temas.html
I1M2010-T22: Algoritmos sobre grafos en HaskellJosé A. Alonso
Se especifica el tipo abstracto de datos de las grafos, se presentan 2 implementaciones en Haskell del TAD y se estudia los algoritmos de recorrido en profundidad y en anchura y el algoritmo de Prim.
Este es el tema 22 del curso de introducción a Haskell. El código y los restantes temas se encuentran en http://www.cs.us.es/~jalonso/cursos/i1m-10/temas.html
Tema 2: Introducción a la programación con HaskellJosé A. Alonso
Se introduce el uso de GHC dentro de emacs.
Este es el 2º tema del curso de introducción a Haskell. El código y los restantes temas se encuentran en http://www.cs.us.es/~jalonso/cursos/i1m/temas.html
Se presentan las estrategias de computación perezosa e impaciente y se muestra cómo Haskell usa la perezosa lo que permite trabajar con objetos infinitos. También se muestra cómo puede hacerse evaluaciones estrictas en Haskell.
Este es el 10º tema del curso de introducción a Haskell. El código y los restantes temas se encuentran en http://www.cs.us.es/~jalonso/cursos/i1m-10/temas.html
LMF-T1: Sintaxis y semántica de la lógica proposicionalJosé A. Alonso
Introducción a la sintaxis y a la semántica de la lógica proposicional.
Este es el tema 1 del curso "Lógica matemática y fundamentos" http://www.cs.us.es/~jalonso/cursos/lmf
Se presentan el algoritmo de DPLL para decir la conjuntos de cláusulas y ejemplos de planteamiento y solución de problemas lógicos con Prover9 y Mace4.
LI2011-T11: Resolución en lógica de primer ordenJosé A. Alonso
Se presentan los algoritmos de unificación y resolución en lógica de primer orden.
Este es el tema 11 del curso de "Lógica informática". Más temas en http://www.cs.us.es/~jalonso/cursos/li/tema
LI2011-T7: Deducción natural en lógica de primer ordenJosé A. Alonso
Se presenta la deducción natural para la lógica de primer orden como ampliación de la presentada en el tema 2 de deducción natural proposicional.
Este es el tema 7 del curso de "Lógica informática". Más temas en http://www.cs.us.es/~jalonso/cursos/li/temas.html
LI2011-T3: Tableros semánticos proposicionalesJosé A. Alonso
Se presenta los tableros semánticos como sistema deductivo de la lógica proposicional.
Este es el tema 3 del curso de "Lógica informática". Más temas en http://www.cs.us.es/~jalonso/cursos/li/temas.html
I1M2010-T24: Programación dinámica en HaskellJosé A. Alonso
Se implementan en Haskell el patrón de programación dinámica y se aplica a los siguientes problemas: producto de cadenas de matrices, árboles binarios de búsqueda optimales, caminos mínimos entre todos los pares de nodos de un grafo y problema del viajante.
Este es el tema 24 del curso de introducción a Haskell. El código y los restantes temas se encuentran en http://www.cs.us.es/~jalonso/cursos/i1m-10/temas.html
LI2011-T9: Formas normales de Skolem y cláusulasJosé A. Alonso
Se presentan los procedimientos de transformación de fórmulas a formas normales de Skolem y cláusulas.
Este es el tema 9 del curso de "Lógica informática". Más temas en http://www.cs.us.es/~jalonso/cursos/li/tema
LIT4: Formales normales conjuntivas y disyuntivasJosé A. Alonso
Se presenta las formas normales conjuntivas y disyuntivas como medio para resolver los problemas TAUT y SAT.
Este es el tema 4 del curso de "Lógica informática". Más temas en http://www.cs.us.es/~jalonso/cursos/li/temas.html
ROMPECABEZAS DE ECUACIONES DE PRIMER GRADO OLIMPIADA DE PARÍS 2024. Por JAVIE...JAVIER SOLIS NOYOLA
El Mtro. JAVIER SOLIS NOYOLA crea y desarrolla el “ROMPECABEZAS DE ECUACIONES DE 1ER. GRADO OLIMPIADA DE PARÍS 2024”. Esta actividad de aprendizaje propone retos de cálculo algebraico mediante ecuaciones de 1er. grado, y viso-espacialidad, lo cual dará la oportunidad de formar un rompecabezas. La intención didáctica de esta actividad de aprendizaje es, promover los pensamientos lógicos (convergente) y creativo (divergente o lateral), mediante modelos mentales de: atención, memoria, imaginación, percepción (Geométrica y conceptual), perspicacia, inferencia, viso-espacialidad. Esta actividad de aprendizaje es de enfoques lúdico y transversal, ya que integra diversas áreas del conocimiento, entre ellas: matemático, artístico, lenguaje, historia, y las neurociencias.
IMÁGENES SUBLIMINALES EN LAS PUBLICACIONES DE LOS TESTIGOS DE JEHOVÁClaude LaCombe
Recuerdo perfectamente la primera vez que oí hablar de las imágenes subliminales de los Testigos de Jehová. Fue en los primeros años del foro de religión “Yahoo respuestas” (que, por cierto, desapareció definitivamente el 30 de junio de 2021). El tema del debate era el “arte religioso”. Todos compartíamos nuestros puntos de vista sobre cuadros como “La Mona Lisa” o el arte apocalíptico de los adventistas, cuando repentinamente uno de los participantes dijo que en las publicaciones de los Testigos de Jehová se ocultaban imágenes subliminales demoniacas.
Lo que pasó después se halla plasmado en la presente obra.
La Unidad Eudista de Espiritualidad se complace en poner a su disposición el siguiente Triduo Eudista, que tiene como propósito ofrecer tres breves meditaciones sobre Jesucristo Sumo y Eterno Sacerdote, el Sagrado Corazón de Jesús y el Inmaculado Corazón de María. En cada día encuentran una oración inicial, una meditación y una oración final.
Triduo Eudista: Jesucristo, Sumo y Eterno Sacerdote; El Corazón de Jesús y el...
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