José A. Alonso
Departamento de Ciencias de la Computación e I.A.
Universidad de Sevilla
Sevilla, 23 de agosto de 2019
Notas:
:opt no-lint
utilizadas para almacenar pares clave-valor donde el orden no importa.
los números de telefono serían los valores y los nombres de la gente serían las claves.
obtener el número correspondiente cada persona.
import Data.Map as M
Data.Map
exporta funciones que colisionan con las de Prelude
y
Data.List
, se suele importar de forma cualificada.import qualified Data.Map as Map
(Map c a)
es el tipo de los diccionarios con las claves de tipo c
y los
valores de tipo a
. Por ejemplo,d1 = fromList [("Ana",5),("Juan",7),("Eva",6)]
:type d1
d2 = fromList [("Ana",5),("Eva",6),("Juan",7)]
d1 == d2
True
(fromList ps)
es el diccionario cuyos elementos es la lista de pares
ps
. Si la lista tiene más de un valor para una clave, sólo se conserva el
último. Por ejemplo,fromList [(5,"a"),(3,"b"),(5,"c")]
fromList [(3,"b"),(5,"c")]
fromList [(5,"a"),(3,"b"),(5,"c"),(3,"a")]
fromList [(3,"a"),(5,"c")]
empty
es el diccionario vacío. Por ejemplo,empty
fromList []
(insert k x d)
es el diccionario obtenido añadiéndole a d
el par (k,x)
y eliminando el valor de k
en d
en el caso de que existiera. Por ejemplo,insert 3 7 empty
fromList [(3,7)]
insert 3 'c' (fromList [(4,'a'),(6,'b'),(8,'e')])
fromList [(3,'c'),(4,'a'),(6,'b'),(8,'e')]
insert 6 'c' (fromList [(4,'a'),(6,'b'),(8,'e')])
fromList [(4,'a'),(6,'c'),(8,'e')]
null d
se verifica si el diccionario d
es vacío. Por ejemplo,M.null (fromList [])
True
M.null (fromList [(3,2)])
False
(size d)
es el número de elementos del diccionario d
. Por ejemplo,size empty
0
size (fromList [(4,'a'),(5,'b'),(2,'e')])
3
size (fromList [(4,'a'),(5,'b'),(2,'e'),(4,'a')])
3
size (fromList [(4,'a'),(5,'b'),(2,'e'),(4,'c')])
3
3+ (singleton k x)
es el diccionario cuya única clave es k
u su valor es
x
. Por ejemplo,
singleton 'd' 4
fromList [('d',4)]
(lookup x d)
es justo el valor del elemento del diccionario d
cuya
clave es x
, si hay alguno y Nothing
, en caso contrario. Por ejemplo,M.lookup 5 (fromList [(4,'a'),(5,'b'),(2,'e')])
Just 'b'
M.lookup 7 (fromList [(4,'a'),(5,'b'),(2,'e')])
Nothing
(member x d)
se verifica si x
es una clave del diccionario d
. Por ejemplo,member 5 (fromList [(4,'a'),(5,'b'),(2,'e')])
True
member 7 (fromList [(4,'a'),(5,'b'),(2,'e')])
False
(map f d)
aplica f
a todos los valores de d
. Por ejemplo,M.map (+1) (fromList [(8,4),(3,8),(7,3),(6,7)])
fromList [(3,9),(6,8),(7,4),(8,5)]
(filter p d)
es el diccionario formado por los elementos de d
cuyo valor
cumple el predicado p
. Por ejemplo,M.filter (>5) (fromList [("b",4),("e",8),("d",3),("a",7)])
fromList [("a",7),("e",8)]
(toList d)
es la lista ordenada de los elementos del diccionario d
. Por
ejemplo,toList (fromList [(1,7),(3,5),(2,8)])
[(1,7),(2,8),(3,5)]
(keys d)
es a lista ordenada de las claves del diccionario d
. Por ejemplo,keys (fromList [(1,7),(3,5),(2,8)])
[1,2,3]
(elems d)
es a lista de los valores del diccionario d
ordenados según sus
claves. Por ejemplo,elems (fromList [(1,7),(3,5),(2,8)])
[7,8,5]
(fromListWith f ps)
es el diccionario cuyos elementos es la lista de pares
ps
combinados con la operación f
. Por ejemplo,fromListWith (++) [(5,"a"),(3,"b"),(5,"c")]
fromList [(3,"b"),(5,"ca")]
fromListWith (++) [(5,"a"),(3,"b"),(5,"c"),(3,"a")]
fromList [(3,"ab"),(5,"ca")]
fromListWith (-) [(5,4),(3,6),(5,2),(3,1)]
fromList [(3,-5),(5,-2)]
(insertWith f k x d)
es el diccionario obtenido añadiéndole a d
el
par (k,x)
si k
no es una clave de d
o el par (k,f x y)
si el par
(k,y)
pertenece a d
. Por ejemplo,insertWith (++) 7 "d" (fromList [(5,"a"), (3,"b")])
fromList [(3,"b"),(5,"a"),(7,"d")]
insertWith (++) 3 "d" (fromList [(5,"a"), (3,"b")])
fromList [(3,"db"),(5,"a")]
insertWith (*) 3 2 (fromList [(5,6), (3,4)])
fromList [(3,8),(5,6)]
insertWith (*) 3 2 empty
fromList [(3,2)]
En Manual de la librería de diccionarios Data.Map se describen las funciones de la librería mediante ejemplos.
En Data.Map.Lazy se describen las funciones de la librería junto con sus órdenes de complejidad.