Set
A value of CSL’s built-in type Set a
is a data structure that satisfy the conditions of sets, i.e., elements cannot occur more than once.
Like all other data in CSL, sets are immutable: inserting elements into or removing elements from sets does not alter the original sets themselves. To create a new set one must combine existing sets with one another or with new elements using the operations
element insertion
Set::insert
,element removal
Set::remove
,union \(A\cup{}B\)
Set::union
,intersection \(A\cap{}B\)
Set::intersection
,set difference \(A\setminus{}B\)
Set::difference
.
The empty set \(\emptyset\) is constructed with the funcition Set::empty
.
It is used as the basis for forming new sets – to obtain a set with a single element one adds an element to the empty set:
val mySet = Set::insert 1 Set::empty
The set mySet
above is equivalent to the set \(\lbrace1\rbrace\).
Like CSL maps, sets are unordered.
Set::empty : Set v
Returns the empty set.
Set::insert : v -> Set v -> Set v
Returns a new set that contains, in addition to the elements already present in the argument set, the given element.
Examples
val emptySet = Set::empty
val oneElm = Set::insert 1 emptySet
val twoElms = Set::insert 2 oneElm
Set::remove : v -> Set v -> Set v
Returns a new set with the given element removed.
Examples
val mySet = Set::insert 1 Set::empty
val myEmptySet = Set::remove 1 mySet
// = Set::empty
val mySet2 = Set::remove 2 mySet
// = mySet
Set::fold : (v -> a -> a) -> a -> Set v -> a
Fold over the elements in a set.
Examples
val sumElems = Set::fold (\x -> \sum -> x + sum) 0
val s = sumElems (Set::fromList [1, 2, 3])
// = 6
Set::contains : v -> Set v -> Bool
Returns True
if the set contains the given value.
Otherwise it returns False
.
Examples
val mySet = Set::insert 1 Set::empty
val oneVal = Set::contains 1 mySet
// = True
val twoVal = Set::contains 2 mySet
// = False
Set::union : Set v -> Set v -> Set v
Take the union of two sets.
Examples
val setA = Set::fromList [1, 2]
val setB = Set::fromList [2, 3]
val setC = Set::union setA setB
// = Set::fromList [1, 2, 3]
Set::intersection : Set v -> Set v -> Set v
Take the intersection of two sets.
Examples
val setA = Set::fromList [1, 2]
val setB = Set::fromList [2, 3]
val setC = Set::intersection setA setB
// = Set::singleton 2
Set::difference : Set v -> Set v -> Set v
Take the difference between two sets.
Examples
val setA = Set::fromList [1, 2]
val setB = Set::fromList [2, 3]
val setC = Set::difference setA setB
// = Set::fromList [1]
Set::singleton : v -> Set v
Constructs a singleton set with just one element.
Examples
val s = Set::singleton 1
// = Set::fromList [1]
Set::fromList : List v -> Set v
Constructs a set with the elements in the given list.
Examples
val prices = Set::fromList [10, 12, 15]
Set::toList : Set v -> List v
Converts a set to a list. The ordering is unspecified and may change.
Examples
val l = [1, 2, 3, 1, 2]
val l2 = Set::toList (Set::fromList l)
// = [1, 2, 3]
Set::size : Set v -> Int
Returns the size of a set.
Examples
val a = Set::size Set::empty
// = 0
val b = Set::size (Set::fromList [1, 1, 2])
// = 2