El contenedor Relacin modela asociaciones dos elementos. Ofrece bsqueda eficiente por cualquiera de los dos elementos.
Es similar a Data.Map en que asocia llaves (k) con valores (v).
A diferencia del contenedor Data.Map, un elemento puede estar asociado ms de una vez.
Los dos propsito fundamentales de esta estructura son
- Asociar elementos. 2. Ofrecer eficiencia en bsquedas por cualquiera de los dos elementos.
Como no estn implementados ni map ni fold, debe convertir la estructura en una lista para procesarla secuencialmente.
- data Relación a b
- size :: Relación a b -> Int
- null :: Relación a b -> Bool
- empty :: Relación a b
- fromList :: (Ord a, Ord b) => [(a, b)] -> Relación a b
- singleton :: a -> b -> Relación a b
- union :: (Ord a, Ord b) => Relación a b -> Relación a b -> Relación a b
- unions :: (Ord a, Ord b) => [Relación a b] -> Relación a b
- insert :: (Ord a, Ord b) => a -> b -> Relación a b -> Relación a b
- delete :: (Ord a, Ord b) => a -> b -> Relación a b -> Relación a b
- lookupDom :: Ord a => a -> Relación a b -> Maybe (Set b)
- lookupRan :: Ord b => b -> Relación a b -> Maybe (Set a)
- memberDom :: Ord a => a -> Relación a b -> Bool
- memberRan :: Ord b => b -> Relación a b -> Bool
- member :: (Ord a, Ord b) => a -> b -> Relación a b -> Bool
- notMember :: (Ord a, Ord b) => a -> b -> Relación a b -> Bool
- toList :: Relación a b -> [(a, b)]
- dom :: Relación a b -> Set a
- ran :: Relación a b -> Set b
- compactarSet :: Ord a => Set (Maybe (Set a)) -> Set a
- (|$>) :: (Ord a, Ord b) => Set a -> Set b -> Relación a b -> Set b
- (<$|) :: (Ord a, Ord b) => Set a -> Set b -> Relación a b -> Set a
- (<|) :: (Ord a, Ord b) => Set a -> Relación a b -> Relación a b
- (|>) :: (Ord a, Ord b) => Relación a b -> Set b -> Relación a b
El tipo Relacin
Funcionalidad provista:
Consultas
Construccin
fromList :: (Ord a, Ord b) => [(a, b)] -> Relación a bSource
La lista debe tener formato [(k1, v1), (k2, v2),..,(kn, vn)].
Operaciones
union :: (Ord a, Ord b) => Relación a b -> Relación a b -> Relación a bSource
La relacin que resulta de unir dos relaciones r
y s
.
unions :: (Ord a, Ord b) => [Relación a b] -> Relación a bSource
Concatena una lista de relaciones en una sola relacin.
insert :: (Ord a, Ord b) => a -> b -> Relación a b -> Relación a bSource
Inserta la asociacin entre x
y y
en la relacin r
delete :: (Ord a, Ord b) => a -> b -> Relación a b -> Relación a bSource
Remueve una asociacin de la relacin.
lookupDom :: Ord a => a -> Relación a b -> Maybe (Set b)Source
El conjunto de valores asociados a un valor del dominio.
lookupRan :: Ord b => b -> Relación a b -> Maybe (Set a)Source
El conjunto de valores asociados a un valor del rango.
memberDom :: Ord a => a -> Relación a b -> BoolSource
True si el elemento x
pertenece al dominio de r
.
member :: (Ord a, Ord b) => a -> b -> Relación a b -> BoolSource
True si la relacin contiene la asociacin x
y y
notMember :: (Ord a, Ord b) => a -> b -> Relación a b -> BoolSource
True si un par no pertenece a la relacin
Conversin
Utilitarios
compactarSet :: Ord a => Set (Maybe (Set a)) -> Set aSource
Compacta un conjunto de conjuntos cuyos valores que pueden ser
Just (Set x)
o Nothing
.
Los casos Nothing
son purgados.
Es similar a concat
.
(<$|) :: (Ord a, Ord b) => Set a -> Set b -> Relación a b -> Set aSource
Implementacin primitiva para el operador de seleccin a la izquierda o a la derecha.
PICA provee dos operadores |> y <|, respectivamente |$> y <$| en esta biblioteca, que trabajan sobre una Relacin y OIS's. PICA expone los operadores definidos ac, para no romper con la abstraccin del tipo de datos Relacin y porque teniendo acceso a los componentes escondidos de Relacin, es ms eficiente la implementacin de la operacin de restriccin.
(a <$| b) r
se lee: por cada elemento b
del conjunto B
,
seleccione un elemento a
del conjunto A
si a
est relacionado con b
en la relacin r
.
(a |$> b) r
se lee: por cada elemento a
del conjunto A
,
seleccione un elemento b
del conjunto B
si a
est relacionado con b
en la relacin r
.
Con respecto a los operadores de restriccin de dominio y restriccin de rango del lenguaje Z que devuelven una relacin, los descritos son diferentes y devuelven el dominio o el rango.