Grafos-0.1.0.0: Set.hs
module Set (
Set (Set),
eset,
set,
add,
addr,
remove,
union,
inter,
dif,
isEmpty,
exists
) where
data Set a = Set [a]
instance (Show a)=>Show (Set a) where
show (Set a)= show a
set::a->Set a
set x = Set [x]
eset::Set a
eset = Set []
addl::a->Set a->Set a
addl x (Set []) = Set [x]
addl x (Set (y:ys)) = Set ([x]++(y:ys))
addr::a->Set a->Set a
addr x (Set []) = Set [x]
addr x (Set (y:ys)) = Set ((y:ys)++[x])
add::(Eq a, Ord a)=>a->Set a->Set a
add x (Set []) = Set [x]
add y (Set (x:xs)) = if x==y then Set (x:xs) else if x<y then addl x (add y (Set xs)) else Set ([y]++(x:xs))
union::(Eq a, Ord a)=>Set a->Set a->Set a
union (Set x) (Set []) = Set x
union (Set []) (Set y) = Set y
union (Set (x:xs)) (Set (y:ys)) = if x==y then union (Set (x:xs)) (Set ys) else if x<y then addl x (union (Set xs) (Set (y:ys))) else addl y (union (Set (x:xs)) (Set ys))
remove::(Eq a)=>a->Set a->Set a
remove x (Set []) = Set []
remove y (Set (x:xs)) = if x==y then Set xs else addl x (remove y (Set xs))
isEmpty::Set a->Bool
isEmpty (Set []) = True
isEmpty (Set (x:xs)) = False
exists::(Eq a)=>a->Set a->Bool
exists x (Set []) = False
exists x (Set (y:ys)) = if x==y then True else exists x (Set ys)
inter::(Eq a, Ord a)=>Set a->Set a->Set a
inter (Set []) x = Set []
inter x (Set []) = Set []
inter (Set (x:xs)) (Set (y:ys)) = if x==y then addl x (inter (Set xs) (Set ys)) else if x<y then inter (Set xs) (Set (y:ys)) else inter (Set (x:xs)) (Set ys)
dif::(Eq a, Ord a)=>Set a->Set a->Set a
dif (Set x) (Set []) = Set x
dif (Set []) x = Set []
dif (Set (x:xs)) (Set (y:ys)) = if x==y then dif (Set xs) (Set ys) else if x<y then addl x (dif (Set xs) (Set (y:ys))) else addl x (dif (Set (x:xs)) (Set ys))