66
Tema 18: El TAD de las tablas 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

Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

Tema 18: El TAD de las tablasInformá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 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablas

Tema 18: El TAD de las tablas1. El tipo predefinido de las tablas (“arrays”)

La clase de los índices de las tablasEl tipo predefinido de las tablas (“arrays”)

2. Especificación del TAD de las tablasSignatura del TAD de las tablasPropiedades del TAD de las tablas

3. Implementaciones del TAD de las tablasLas tablas como funcionesLas tablas como listas de asociaciónLas tablas como matrices

4. Comprobación de las implementaciones con QuickCheckLibrerías auxiliaresGenerador de tablasEspecificación de las propiedades de las tablasComprobación de las propiedades

2 / 51

Page 3: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasEl tipo predefinido de las tablas (“arrays”)

La clase de los índices de las tablas

Tema 18: El TAD de las tablas

1. El tipo predefinido de las tablas (“arrays”)La clase de los índices de las tablasEl tipo predefinido de las tablas (“arrays”)

2. Especificación del TAD de las tablas

3. Implementaciones del TAD de las tablas

4. Comprobación de las implementaciones con QuickCheck

3 / 51

Page 4: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasEl tipo predefinido de las tablas (“arrays”)

La clase de los índices de las tablas

La clase de los índices de las tablasI La clase de los índices de las tablas es Ix.I Ix se encuentra en la librería Data.IxI Información de la clase Ix:

ghci> :info Ixclass (Ord a) => Ix a where

range :: (a, a) -> [a]index :: (a, a) -> a -> IntinRange :: (a, a) -> a -> BoolrangeSize :: (a, a) -> Int

instance Ix Ordering -- Defined in GHC.Arrinstance Ix Integer -- Defined in GHC.Arrinstance Ix Int -- Defined in GHC.Arrinstance Ix Char -- Defined in GHC.Arrinstance Ix Bool -- Defined in GHC.Arrinstance (Ix a, Ix b) => Ix (a, b) 4 / 51

Page 5: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasEl tipo predefinido de las tablas (“arrays”)

La clase de los índices de las tablas

La clase de los índices de las tablas

I (range (m,n)) es la lista de los índices desde m hasta n, en elorden del índice. Por ejemplo,range (0,4) [0,1,2,3,4]range (3,9) [3,4,5,6,7,8,9]range (’b’,’f’) "bcdef"range ((0,0),(1,2)) [(0,0),(0,1),(0,2),

(1,0),(1,1),(1,2)]I (index (m,n) i) es el ordinal del índice i dentro del rango

(m,n). Por ejemplo,index (3,9) 5 2index (’b’,’f’) ’e’ 3index ((0,0),(1,2)) (1,1) 4

5 / 51

Page 6: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasEl tipo predefinido de las tablas (“arrays”)

La clase de los índices de las tablas

La clase de los índices de las tablas

I (inRange (m,n) i) se verifica si el índice i está dentro delrango limitado por m y n. Por ejemplo,inRange (0,4) 3 TrueinRange (0,4) 7 FalseinRange ((0,0),(1,2)) (1,1) TrueinRange ((0,0),(1,2)) (1,5) False

I (rangeSize (m,n)) es el número de elementos en el rangolimitado por m y n. Por ejemplo,rangeSize (3,9) 7rangeSize (’b’,’f’) 5rangeSize ((0,0),(1,2)) 6

6 / 51

Page 7: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasEl tipo predefinido de las tablas (“arrays”)

El tipo predefinido de las tablas (“arrays”)

Tema 18: El TAD de las tablas

1. El tipo predefinido de las tablas (“arrays”)La clase de los índices de las tablasEl tipo predefinido de las tablas (“arrays”)

2. Especificación del TAD de las tablas

3. Implementaciones del TAD de las tablas

4. Comprobación de las implementaciones con QuickCheck

7 / 51

Page 8: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasEl tipo predefinido de las tablas (“arrays”)

El tipo predefinido de las tablas (“arrays”)

El tipo predefinido de las tablas (“arrays”)

I La librería de las tablas es Data.Array.I Para usar las tablas hay que escribir al principio del fichero

import Data.Array

I Al importar Data.Array también se importa Data.Ix.I (Array i v) es el tipo de las tablas con índice en i y valores en

v.

8 / 51

Page 9: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasEl tipo predefinido de las tablas (“arrays”)

El tipo predefinido de las tablas (“arrays”)

Creación de tablas

I (array (m,n) ivs) es la tabla de índices en el rango limitadopor m y n definida por la lista de asociación ivs (cuyos elementosson pares de la forma (índice, valor)). Por ejemplo,ghci> array (1,3) [(3,6),(1,2),(2,4)]array (1,3) [(1,2),(2,4),(3,6)]ghci> array (1,3) [(i,2*i) | i <- [1..3]]array (1,3) [(1,2),(2,4),(3,6)]

9 / 51

Page 10: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasEl tipo predefinido de las tablas (“arrays”)

El tipo predefinido de las tablas (“arrays”)

Ejemplos de definiciones de tablas

I (cuadrados n) es un vector de n+1 elementos tal que suelemento i–ésimo es i2. Por ejemplo,ghci> cuadrados 5array (0,5) [(0,0),(1,1),(2,4),(3,9),(4,16),(5,25)]

cuadrados :: Int -> Array Int Intcuadrados n = array (0,n) [(i,i^2) | i <- [0..n]]

I v es un vector con 4 elementos de tipo carácter. Por ejemplo,

v :: Array Integer Charv = array (1,4) [(3,’c’),(2,’a’), (1,’f’), (4,’e’)]

10 / 51

Page 11: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasEl tipo predefinido de las tablas (“arrays”)

El tipo predefinido de las tablas (“arrays”)

Ejemplos de definiciones de tablasI m es la matriz con 2 filas y 3 columnas tal que el elemento de la

posición (i,j) es el producto de i por j.

m :: Array (Int, Int) Intm = array ((1,1),(2,3)) [((i,j),i*j)) | i<-[1..2],j<-[1..3]]

I Una tabla está indefinida si algún índice está fuera de rango.ghci> array (1,4) [(i , i*i) | i <- [1..4]]array (1,4) [(1,1),(2,4),(3,9),(4,16)]ghci> array (1,4) [(i , i*i) | i <- [1..5]]array *** Exception: Error in array indexghci> array (1,4) [(i , i*i) | i <- [1..3]]array (1,4) [(1,1),(2,4),(3,9),(4,***Exception: (Array.!): undefined array element

11 / 51

Page 12: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasEl tipo predefinido de las tablas (“arrays”)

El tipo predefinido de las tablas (“arrays”)

Descomposición de tablasI (t ! i) es el valor del índice i en la tabla t. Por ejemplo,

ghci> varray (1,4) [(1,’f’),(2,’a’),(3,’c’),(4,’e’)]ghci> v!3’c’ghci> marray ((1,1),(2,3)) [((1,1),1),((1,2),2),((1,3),3),

((2,1),2),((2,2),4),((2,3),6)]ghci> m!(2,3)6

I (bounds t) es el rango de la tabla t. Por ejemplo,bounds m ((1,1),(2,3))

I (indices t) es la lista de los índices de la tabla t. Por ejemplo,indices m [(1,1),(1,2),(1,3),(2,1),(2,2),(2,3)]

12 / 51

Page 13: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasEl tipo predefinido de las tablas (“arrays”)

El tipo predefinido de las tablas (“arrays”)

Descomposición de tablas

I (elems t) es la lista de los elementos de la tabla t. Por ejemplo,elems m [1,2,3,2,4,6]

I (assocs t) es la lista de asociaciones de la tabla t. Por ejemplo,ghci> assocs m[((1,1),1),((1,2),2),((1,3),3),((2,1),2),((2,2),4),((2,3),6)]

13 / 51

Page 14: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasEl tipo predefinido de las tablas (“arrays”)

El tipo predefinido de las tablas (“arrays”)

Modificación de tablas

I (t // ivs) es la tabla t asignándole a los índices de la lista deasociación ivs sus correspondientes valores. Por ejemplo,ghci> m // [((1,1),4), ((2,2),8)]array ((1,1),(2,3))

[((1,1),4),((1,2),2),((1,3),3),((2,1),2),((2,2),8),((2,3),6)]

ghci> marray ((1,1),(2,3))

[((1,1),1),((1,2),2),((1,3),3),((2,1),2),((2,2),4),((2,3),6)]

14 / 51

Page 15: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasEl tipo predefinido de las tablas (“arrays”)

El tipo predefinido de las tablas (“arrays”)

Definición de tabla por recursión

I (fibs n) es el vector formado por los n primeros términos de lasucesión de Fibonacci. Por ejemplo,ghci> fibs 7array (0,7) [(0,1),(1,1),(2,2),(3,3),

(4,5),(5,8),(6,13),(7,21)]

fibs :: Int -> Array Int Intfibs n = a where

a = array (0,n)([(0,1),(1,1)] ++[(i,a!(i-1)+a!(i-2)) | i <- [2..n]])

15 / 51

Page 16: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasEl tipo predefinido de las tablas (“arrays”)

El tipo predefinido de las tablas (“arrays”)

Otras funciones de creación de tablas

I (listArray (m,n) vs) es la tabla cuyo rango es (m,n) y cuyalista de valores es vs. Por ejemplo,ghci> listArray (2,5) "Roma"array (2,5) [(2,’R’),(3,’o’),(4,’m’),(5,’a’)]ghci> listArray ((1,2),(2,4)) [5..12]array ((1,2),(2,4)) [((1,2),5),((1,3),6),((1,4),7),

((2,2),8),((2,3),9),((2,4),10)]

16 / 51

Page 17: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasEl tipo predefinido de las tablas (“arrays”)

El tipo predefinido de las tablas (“arrays”)

Construcción acumulativa de tablas

I (accumArray f v (m,n) ivs) es la tabla de rango (m,n) talque el valor del índice i se obtiene acumulando la aplicación dela función f al valor inicial v y a los valores de la lista deasociación ivs cuyo índice es i. Por ejemplo,ghci> accumArray (+) 0 (1,3) [(1,4),(2,5),(1,2)]array (1,3) [(1,6),(2,5),(3,0)]ghci> accumArray (*) 1 (1,3) [(1,4),(2,5),(1,2)]array (1,3) [(1,8),(2,5),(3,1)]

17 / 51

Page 18: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasEl tipo predefinido de las tablas (“arrays”)

El tipo predefinido de las tablas (“arrays”)

Construcción acumulativa de tablas

I (histograma r is) es el vector formado contando cuantasveces aparecen los elementos del rango r en la lista de índices is.Por ejemplo,ghci> histograma (0,5) [3,1,4,1,5,4,2,7]array (0,5) [(0,0),(1,2),(2,1),(3,1),(4,2),(5,1)]

histograma :: (Ix a, Num b) => (a,a) -> [a] -> Array a bhistograma r is =

accumArray (+) 0 r [(i,1) | i <- is, inRange r i]

18 / 51

Page 19: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasEspecificación del TAD de las tablas

Signatura del TAD de las tablas

Tema 18: El TAD de las tablas

1. El tipo predefinido de las tablas (“arrays”)

2. Especificación del TAD de las tablasSignatura del TAD de las tablasPropiedades del TAD de las tablas

3. Implementaciones del TAD de las tablas

4. Comprobación de las implementaciones con QuickCheck

19 / 51

Page 20: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasEspecificación del TAD de las tablas

Signatura del TAD de las tablas

Signatura del TAD de las tablas

I Signatura:tabla :: Eq i => [(i,v)] -> Tabla i vvalor :: Eq i => Tabla i v -> i -> vmodifica :: Eq i => (i,v) -> Tabla i v -> Tabla i v

I Descripción de las operaciones:I (tabla ivs) es la tabla correspondiente a la lista de asociación

ivs (que es una lista de pares formados por los índices y losvalores).

I (valor t i) es el valor del índice i en la tabla t.I (modifica (i,v) t) es la tabla obtenida modificando en la

tabla t el valor de i por v.

20 / 51

Page 21: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasEspecificación del TAD de las tablas

Propiedades del TAD de las tablas

Tema 18: El TAD de las tablas

1. El tipo predefinido de las tablas (“arrays”)

2. Especificación del TAD de las tablasSignatura del TAD de las tablasPropiedades del TAD de las tablas

3. Implementaciones del TAD de las tablas

4. Comprobación de las implementaciones con QuickCheck

21 / 51

Page 22: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasEspecificación del TAD de las tablas

Propiedades del TAD de las tablas

Propiedades del TAD de las tablas

1. modifica (i,v’) (modifica (i,v) t)= modifica (i,v’) t

2. Si i /= i’, entoncesmodifica (i’,v’) (modifica (i,v) t)= modifica (i,v) (modifica (i’,v’) t)

3. valor (modifica (i,v) t) i = v

4. Si i /= i’, entoncesvalor (modifica (i,v) (modifica (k’,v’) t)) i’= valor (modifica (k’,v’) t) i’

22 / 51

Page 23: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasImplementaciones del TAD de las tablas

Las tablas como funciones

Tema 18: El TAD de las tablas

1. El tipo predefinido de las tablas (“arrays”)

2. Especificación del TAD de las tablas

3. Implementaciones del TAD de las tablasLas tablas como funcionesLas tablas como listas de asociaciónLas tablas como matrices

4. Comprobación de las implementaciones con QuickCheck

23 / 51

Page 24: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasImplementaciones del TAD de las tablas

Las tablas como funciones

Las tablas como funciones

I Cabecera del módulo:

module TablaConFunciones(Tabla,tabla, -- Eq i => [(i,v)] -> Tabla i vvalor, -- Eq i => Tabla i v -> i -> vmodifica -- Eq i => (i,v) -> Tabla i v -> Tabla i v

) where

I Las tablas como funciones.

newtype Tabla i v = Tbl (i -> v)

24 / 51

Page 25: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasImplementaciones del TAD de las tablas

Las tablas como funciones

Las tablas como funciones

I Procedimiento de escritura.

instance Show (Tabla i v) whereshowsPrec _ _ cad = showString "<<Una tabla>>" cad

I Ejemplos de tablas:

t1 = tabla [(i,f i) | i <- [1..6] ]where f x | x < 3 = x

| otherwise = 3-x

t2 = tabla [(4,89), (1,90), (2,67)]

25 / 51

Page 26: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasImplementaciones del TAD de las tablas

Las tablas como funciones

Las tablas como funcionesI (valor t i) es el valor del índice i en la tabla t. Por ejemplo,

valor t1 6 -3valor t2 2 67valor t2 5 *** Exception: fuera de rango

valor :: Eq i => Tabla i v -> i -> vvalor (Tbl f) i = f i

I (modifica (i,v) t) es la tabla obtenida modificando en latabla t el valor de i por v. Por ejemplo,valor (modifica (6,9) t1) 6 9

modifica :: Eq i => (i,v) -> Tabla i v -> Tabla i vmodifica (i,v) (Tbl f) = Tbl g

where g j | j == i = v| otherwise = f j 26 / 51

Page 27: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasImplementaciones del TAD de las tablas

Las tablas como funciones

Las tablas como funcionesI (valor t i) es el valor del índice i en la tabla t. Por ejemplo,

valor t1 6 -3valor t2 2 67valor t2 5 *** Exception: fuera de rango

valor :: Eq i => Tabla i v -> i -> vvalor (Tbl f) i = f i

I (modifica (i,v) t) es la tabla obtenida modificando en latabla t el valor de i por v. Por ejemplo,valor (modifica (6,9) t1) 6 9

modifica :: Eq i => (i,v) -> Tabla i v -> Tabla i vmodifica (i,v) (Tbl f) = Tbl g

where g j | j == i = v| otherwise = f j 26 / 51

Page 28: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasImplementaciones del TAD de las tablas

Las tablas como funciones

Las tablas como funcionesI (valor t i) es el valor del índice i en la tabla t. Por ejemplo,

valor t1 6 -3valor t2 2 67valor t2 5 *** Exception: fuera de rango

valor :: Eq i => Tabla i v -> i -> vvalor (Tbl f) i = f i

I (modifica (i,v) t) es la tabla obtenida modificando en latabla t el valor de i por v. Por ejemplo,valor (modifica (6,9) t1) 6 9

modifica :: Eq i => (i,v) -> Tabla i v -> Tabla i vmodifica (i,v) (Tbl f) = Tbl g

where g j | j == i = v| otherwise = f j 26 / 51

Page 29: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasImplementaciones del TAD de las tablas

Las tablas como funciones

Las tablas como funciones

I (tabla ivs) es la tabla correspondiente a la lista de asociaciónivs (que es una lista de pares formados por los índices y losvalores). Por ejemplo,ghci> tabla [(4,89), (1,90), (2,67)]<<Una tabla>>

tabla :: Eq i => [(i,v)] -> Tabla i vtabla ivs =

foldr modifica(Tbl (\_ -> error "fuera de rango"))ivs

27 / 51

Page 30: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasImplementaciones del TAD de las tablas

Las tablas como funciones

Las tablas como funciones

I (tabla ivs) es la tabla correspondiente a la lista de asociaciónivs (que es una lista de pares formados por los índices y losvalores). Por ejemplo,ghci> tabla [(4,89), (1,90), (2,67)]<<Una tabla>>

tabla :: Eq i => [(i,v)] -> Tabla i vtabla ivs =

foldr modifica(Tbl (\_ -> error "fuera de rango"))ivs

27 / 51

Page 31: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasImplementaciones del TAD de las tablas

Las tablas como listas de asociación

Tema 18: El TAD de las tablas

1. El tipo predefinido de las tablas (“arrays”)

2. Especificación del TAD de las tablas

3. Implementaciones del TAD de las tablasLas tablas como funcionesLas tablas como listas de asociaciónLas tablas como matrices

4. Comprobación de las implementaciones con QuickCheck

28 / 51

Page 32: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasImplementaciones del TAD de las tablas

Las tablas como listas de asociación

Las tablas como listas de asociación

I Cabecera del módulo

module TablaConListasDeAsociacion(Tabla,tabla, -- Eq i => [(i,v)] -> Tabla i vvalor, -- Eq i => Tabla i v -> i -> vmodifica -- Eq i => (i,v) -> Tabla i v -> Tabla i v

) where

I Las tablas como listas de asociación.

newtype Tabla i v = Tbl [(i,v)]deriving Show

29 / 51

Page 33: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasImplementaciones del TAD de las tablas

Las tablas como listas de asociación

Las tablas como listas de asociaciónI Ejemplos de tablas

I Definición:

t1 = tabla [(i,f i) | i <- [1..6] ]where f x | x < 3 = x

| otherwise = 3-x

t2 = tabla [(4,89), (1,90), (2,67)]

I Evaluación:ghci> t1Tbl [(1,1),(2,2),(3,0),(4,-1),(5,-2),(6,-3)]

ghci> t2Tbl [(4,89),(1,90),(2,67)]

30 / 51

Page 34: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasImplementaciones del TAD de las tablas

Las tablas como listas de asociación

Las tablas como listas de asociación

I (tabla ivs) es la tabla correspondiente a la lista de asociaciónivs (que es una lista de pares formados por los índices y losvalores). Por ejemplo,ghci> tabla [(4,89),(1,90),(2,67)]Tbl [(4,89),(1,90),(2,67)]

tabla :: Eq i => [(i,v)] -> Tabla i vtabla ivs = Tbl ivs

31 / 51

Page 35: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasImplementaciones del TAD de las tablas

Las tablas como listas de asociación

Las tablas como listas de asociación

I (tabla ivs) es la tabla correspondiente a la lista de asociaciónivs (que es una lista de pares formados por los índices y losvalores). Por ejemplo,ghci> tabla [(4,89),(1,90),(2,67)]Tbl [(4,89),(1,90),(2,67)]

tabla :: Eq i => [(i,v)] -> Tabla i vtabla ivs = Tbl ivs

31 / 51

Page 36: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasImplementaciones del TAD de las tablas

Las tablas como listas de asociación

Las tablas como listas de asociación

I (valor t i) es el valor del índice i en la tabla t. Por ejemplo,valor t1 6 -3valor t2 2 67valor t2 5 *** Exception: fuera de rango

valor :: Eq i => Tabla i v -> i -> vvalor (Tbl []) i = error "fuera de rango"valor (Tbl ((j,v):r)) i

| i == j = v| otherwise = valor (Tbl r) i

32 / 51

Page 37: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasImplementaciones del TAD de las tablas

Las tablas como listas de asociación

Las tablas como listas de asociación

I (valor t i) es el valor del índice i en la tabla t. Por ejemplo,valor t1 6 -3valor t2 2 67valor t2 5 *** Exception: fuera de rango

valor :: Eq i => Tabla i v -> i -> vvalor (Tbl []) i = error "fuera de rango"valor (Tbl ((j,v):r)) i

| i == j = v| otherwise = valor (Tbl r) i

32 / 51

Page 38: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasImplementaciones del TAD de las tablas

Las tablas como listas de asociación

Las tablas como listas de asociación

I (modifica (i,x) t) es la tabla obtenida modificando en latabla t el valor de i por x. Por ejemplo,valor t1 6 -3valor (modifica (6,9) t1) 6 9

modifica :: Eq i => (i,v) -> Tabla i v -> Tabla i vmodifica p (Tbl []) = (Tbl [p])modifica p’@(i,_) (Tbl (p@(j,_):r))

| i == j = Tbl (p’:r)| otherwise = Tbl (p:r’)where Tbl r’ = modifica p’ (Tbl r)

33 / 51

Page 39: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasImplementaciones del TAD de las tablas

Las tablas como listas de asociación

Las tablas como listas de asociación

I (modifica (i,x) t) es la tabla obtenida modificando en latabla t el valor de i por x. Por ejemplo,valor t1 6 -3valor (modifica (6,9) t1) 6 9

modifica :: Eq i => (i,v) -> Tabla i v -> Tabla i vmodifica p (Tbl []) = (Tbl [p])modifica p’@(i,_) (Tbl (p@(j,_):r))

| i == j = Tbl (p’:r)| otherwise = Tbl (p:r’)where Tbl r’ = modifica p’ (Tbl r)

33 / 51

Page 40: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasImplementaciones del TAD de las tablas

Las tablas como matrices

Tema 18: El TAD de las tablas

1. El tipo predefinido de las tablas (“arrays”)

2. Especificación del TAD de las tablas

3. Implementaciones del TAD de las tablasLas tablas como funcionesLas tablas como listas de asociaciónLas tablas como matrices

4. Comprobación de las implementaciones con QuickCheck

34 / 51

Page 41: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasImplementaciones del TAD de las tablas

Las tablas como matrices

Las tablas como matricesI Cabecera del módulo:

module TablaConMatrices(Tabla,tabla, -- Eq i => [(i,v)] -> Tabla i vvalor, -- Eq i => Tabla i v -> i -> vmodifica, -- Eq i => (i,v) -> Tabla i v -> Tabla i vtieneValor -- Ix i => Tabla i v -> i -> Bool

) where

I Importación de la librería auxiliar:

import Data.Array

I Las tablas como matrices.

newtype Tabla i v = Tbl (Array i v) deriving (Show, Eq)35 / 51

Page 42: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasImplementaciones del TAD de las tablas

Las tablas como matrices

Las tablas como matricesI Ejemplos de tablas:

I Definición:

t1 = tabla [(i,f i) | i <- [1..6] ]where f x | x < 3 = x

| otherwise = 3-x

t2 = tabla [(1,5),(2,4),(3,7)]

I Evaluación:ghci> t1Tbl (array (1,6) [(1,1),(2,2),(3,0),

(4,-1),(5,-2),(6,-3)])

ghci> t2Tbl (array (1,3) [(1,5),(2,4),(3,7)])

36 / 51

Page 43: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasImplementaciones del TAD de las tablas

Las tablas como matrices

Las tablas como matrices

I (tabla ivs) es la tabla correspondiente a la lista de asociaciónivs (que es una lista de pares formados por los índices y losvalores). Por ejemplo,ghci> tabla [(1,5),(3,7),(2,4)]Tbl (array (1,3) [(1,5),(2,4),(3,7)])

tabla :: Ix i => [(i,v)] -> Tabla i vtabla ivs = Tbl (array (m,n) ivs)

where indices = [i | (i,_) <- ivs]m = minimum indicesn = maximum indices

37 / 51

Page 44: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasImplementaciones del TAD de las tablas

Las tablas como matrices

Las tablas como matrices

I (tabla ivs) es la tabla correspondiente a la lista de asociaciónivs (que es una lista de pares formados por los índices y losvalores). Por ejemplo,ghci> tabla [(1,5),(3,7),(2,4)]Tbl (array (1,3) [(1,5),(2,4),(3,7)])

tabla :: Ix i => [(i,v)] -> Tabla i vtabla ivs = Tbl (array (m,n) ivs)

where indices = [i | (i,_) <- ivs]m = minimum indicesn = maximum indices

37 / 51

Page 45: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasImplementaciones del TAD de las tablas

Las tablas como matrices

Las tablas como matricesI (valor t i) es el valor del índice i en la tabla t. Por ejemplo,

valor t1 6 -3valor t2 2 67valor t2 5 *** Exception: fuera de rango

valor :: Ix i => Tabla i v -> i -> vvalor (Tbl t) i = t ! i

I (modifica (i,x) t) es la tabla obtenida modificando en latabla t el valor de i por x. Por ejemplo,valor t1 6 -3valor (modifica (6,9) t1) 6 9

modifica :: Ix i => (i,v) -> Tabla i v -> Tabla i vmodifica p (Tbl t) = Tbl (t // [p])

38 / 51

Page 46: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasImplementaciones del TAD de las tablas

Las tablas como matrices

Las tablas como matricesI (valor t i) es el valor del índice i en la tabla t. Por ejemplo,

valor t1 6 -3valor t2 2 67valor t2 5 *** Exception: fuera de rango

valor :: Ix i => Tabla i v -> i -> vvalor (Tbl t) i = t ! i

I (modifica (i,x) t) es la tabla obtenida modificando en latabla t el valor de i por x. Por ejemplo,valor t1 6 -3valor (modifica (6,9) t1) 6 9

modifica :: Ix i => (i,v) -> Tabla i v -> Tabla i vmodifica p (Tbl t) = Tbl (t // [p])

38 / 51

Page 47: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasImplementaciones del TAD de las tablas

Las tablas como matrices

Las tablas como matricesI (valor t i) es el valor del índice i en la tabla t. Por ejemplo,

valor t1 6 -3valor t2 2 67valor t2 5 *** Exception: fuera de rango

valor :: Ix i => Tabla i v -> i -> vvalor (Tbl t) i = t ! i

I (modifica (i,x) t) es la tabla obtenida modificando en latabla t el valor de i por x. Por ejemplo,valor t1 6 -3valor (modifica (6,9) t1) 6 9

modifica :: Ix i => (i,v) -> Tabla i v -> Tabla i vmodifica p (Tbl t) = Tbl (t // [p])

38 / 51

Page 48: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasImplementaciones del TAD de las tablas

Las tablas como matrices

Las tablas como matricesI (cotas t) son las cotas de la tabla t. Por ejemplo,

t2 Tbl (array (1,3) [(1,5),(2,4),(3,7)])cotas t2 (1,3)

cotas :: Ix i => Tabla i v -> (i,i)cotas (Tbl t) = bounds t

I (tieneValor t x) se verifica si x es una clave de la tabla t.Por ejemplo,tieneValor t2 3 TruetieneValor t2 4 False

tieneValor :: Ix i => Tabla i v -> i -> BooltieneValor t = inRange (cotas t)

39 / 51

Page 49: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasImplementaciones del TAD de las tablas

Las tablas como matrices

Las tablas como matricesI (cotas t) son las cotas de la tabla t. Por ejemplo,

t2 Tbl (array (1,3) [(1,5),(2,4),(3,7)])cotas t2 (1,3)

cotas :: Ix i => Tabla i v -> (i,i)cotas (Tbl t) = bounds t

I (tieneValor t x) se verifica si x es una clave de la tabla t.Por ejemplo,tieneValor t2 3 TruetieneValor t2 4 False

tieneValor :: Ix i => Tabla i v -> i -> BooltieneValor t = inRange (cotas t)

39 / 51

Page 50: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasImplementaciones del TAD de las tablas

Las tablas como matrices

Las tablas como matricesI (cotas t) son las cotas de la tabla t. Por ejemplo,

t2 Tbl (array (1,3) [(1,5),(2,4),(3,7)])cotas t2 (1,3)

cotas :: Ix i => Tabla i v -> (i,i)cotas (Tbl t) = bounds t

I (tieneValor t x) se verifica si x es una clave de la tabla t.Por ejemplo,tieneValor t2 3 TruetieneValor t2 4 False

tieneValor :: Ix i => Tabla i v -> i -> BooltieneValor t = inRange (cotas t)

39 / 51

Page 51: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasComprobación de las implementaciones con QuickCheck

Librerías auxiliares

Tema 18: El TAD de las tablas

1. El tipo predefinido de las tablas (“arrays”)

2. Especificación del TAD de las tablas

3. Implementaciones del TAD de las tablas

4. Comprobación de las implementaciones con QuickCheckLibrerías auxiliaresGenerador de tablasEspecificación de las propiedades de las tablasComprobación de las propiedades

40 / 51

Page 52: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasComprobación de las implementaciones con QuickCheck

Librerías auxiliares

Comprobación de las propiedades de las tablas

I Importación de la implementación de las tablas que se deseaverificar.

import TablaConListasDeAsociacion

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

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

41 / 51

Page 53: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasComprobación de las implementaciones con QuickCheck

Generador de tablas

Tema 18: El TAD de las tablas

1. El tipo predefinido de las tablas (“arrays”)

2. Especificación del TAD de las tablas

3. Implementaciones del TAD de las tablas

4. Comprobación de las implementaciones con QuickCheckLibrerías auxiliaresGenerador de tablasEspecificación de las propiedades de las tablasComprobación de las propiedades

42 / 51

Page 54: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasComprobación de las implementaciones con QuickCheck

Generador de tablas

Generador de tablasI genTabla es un generador de tablas. Por ejemplo,

ghci> sample genTablaTbl [(1,0)]Tbl [(1,-1)]Tbl [(1,0),(2,-1),(3,1),(4,1),(5,0)]

genTabla :: Gen (Tabla Int Int)genTabla =

do x <- arbitraryxs <- listOf arbitraryreturn (tabla (zip [1..] (x:xs)))

instance Arbitrary (Tabla Int Int) wherearbitrary = genTabla

43 / 51

Page 55: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasComprobación de las implementaciones con QuickCheck

Especificación de las propiedades de las tablas

Tema 18: El TAD de las tablas

1. El tipo predefinido de las tablas (“arrays”)

2. Especificación del TAD de las tablas

3. Implementaciones del TAD de las tablas

4. Comprobación de las implementaciones con QuickCheckLibrerías auxiliaresGenerador de tablasEspecificación de las propiedades de las tablasComprobación de las propiedades

44 / 51

Page 56: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasComprobación de las implementaciones con QuickCheck

Especificación de las propiedades de las tablas

Especificación de las propiedades de las tablas

I Al modificar una tabla dos veces con la misma clave se obtiene elmismos resultado que modificarla una vez con el último valor.

prop_modifica_modifica_1 :: Int -> Int -> Int-> Tabla Int Int -> Bool

prop_modifica_modifica_1 i v v’ t =modifica (i,v’) (modifica (i,v) t)== modifica (i,v’) t

45 / 51

Page 57: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasComprobación de las implementaciones con QuickCheck

Especificación de las propiedades de las tablas

Especificación de las propiedades de las tablas

I Al modificar una tabla dos veces con la misma clave se obtiene elmismos resultado que modificarla una vez con el último valor.

prop_modifica_modifica_1 :: Int -> Int -> Int-> Tabla Int Int -> Bool

prop_modifica_modifica_1 i v v’ t =modifica (i,v’) (modifica (i,v) t)== modifica (i,v’) t

45 / 51

Page 58: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasComprobación de las implementaciones con QuickCheck

Especificación de las propiedades de las tablas

Especificación de las propiedades de las tablas

I Al modificar una tabla con dos pares con claves distintas noimporta el orden en que se añadan los pares.

prop_modifica_modifica_2 :: Int -> Int -> Int -> Int-> Tabla Int Int -> Property

prop_modifica_modifica_2 i i’ v v’ t =i /= i’ ==>modifica (i’,v’) (modifica (i,v) t)== modifica (i,v) (modifica (i’,v’) t)

46 / 51

Page 59: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasComprobación de las implementaciones con QuickCheck

Especificación de las propiedades de las tablas

Especificación de las propiedades de las tablas

I Al modificar una tabla con dos pares con claves distintas noimporta el orden en que se añadan los pares.

prop_modifica_modifica_2 :: Int -> Int -> Int -> Int-> Tabla Int Int -> Property

prop_modifica_modifica_2 i i’ v v’ t =i /= i’ ==>modifica (i’,v’) (modifica (i,v) t)== modifica (i,v) (modifica (i’,v’) t)

46 / 51

Page 60: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasComprobación de las implementaciones con QuickCheck

Especificación de las propiedades de las tablas

Especificación de las propiedades de las tablas

I El valor de la clave i en la tabla obtenida añadiéndole el par(i,v) a la tabla t es v.

prop_valor_modifica_1 :: Int -> Int-> Tabla Int Int -> Bool

prop_valor_modifica_1 i v t =valor (modifica (i,v) t) i == v

47 / 51

Page 61: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasComprobación de las implementaciones con QuickCheck

Especificación de las propiedades de las tablas

Especificación de las propiedades de las tablas

I El valor de la clave i en la tabla obtenida añadiéndole el par(i,v) a la tabla t es v.

prop_valor_modifica_1 :: Int -> Int-> Tabla Int Int -> Bool

prop_valor_modifica_1 i v t =valor (modifica (i,v) t) i == v

47 / 51

Page 62: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasComprobación de las implementaciones con QuickCheck

Especificación de las propiedades de las tablas

Especificación de las propiedades de las tablas

I Sean i e j dos claves distintas. El valor de la clave j en la tablaobtenida añadiéndole el par (i,v) a la tabla t’ (que contiene laclave j) es el valor de j en t’.

prop_valor_modifica_2 :: Int -> Int -> Int -> Int-> Tabla Int Int -> Property

prop_valor_modifica_2 i v j v’ t =i /= j ==>valor (modifica (i,v) t’) j == valor t’ jwhere t’ = modifica (j,v’) t

48 / 51

Page 63: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasComprobación de las implementaciones con QuickCheck

Especificación de las propiedades de las tablas

Especificación de las propiedades de las tablas

I Sean i e j dos claves distintas. El valor de la clave j en la tablaobtenida añadiéndole el par (i,v) a la tabla t’ (que contiene laclave j) es el valor de j en t’.

prop_valor_modifica_2 :: Int -> Int -> Int -> Int-> Tabla Int Int -> Property

prop_valor_modifica_2 i v j v’ t =i /= j ==>valor (modifica (i,v) t’) j == valor t’ jwhere t’ = modifica (j,v’) t

48 / 51

Page 64: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasComprobación de las implementaciones con QuickCheck

Comprobación de las propiedades

Tema 18: El TAD de las tablas

1. El tipo predefinido de las tablas (“arrays”)

2. Especificación del TAD de las tablas

3. Implementaciones del TAD de las tablas

4. Comprobación de las implementaciones con QuickCheckLibrerías auxiliaresGenerador de tablasEspecificación de las propiedades de las tablasComprobación de las propiedades

49 / 51

Page 65: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasComprobació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. Por ejemplo,

compruebaPropiedades =defaultMain

[testGroup "Propiedades del TAD tabla"[testProperty "P1" prop_modifica_modifica_1,testProperty "P2" prop_modifica_modifica_2,testProperty "P3" prop_valor_modifica_1,testProperty "P4" prop_valor_modifica_2]]

50 / 51

Page 66: Tema 18: El TAD de las tablas - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-18.pdf · IMTema18: ElTADdelastablas Tema18:ElTADdelastablas 1.Eltipopredefinidodelastablas(“arrays”)

IM Tema 18: El TAD de las tablasComprobación de las implementaciones con QuickCheck

Comprobación de las propiedades

Comprobación de las propiedades de las tablas

Propiedades del TAD tabla: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

51 / 51