Module
pooka/set
src/pooka/set.pookaA set keeps one chair for each distinct guest.
Store membership through an immutable dictionary with Nil values. Set operations return new sets, enumeration order is unspecified, and equals compares membership rather than the identity of captured storage closures.
import pooka/set
assert set.from_list([1, 1, 2]).size() == 2
API reference
class Set(a)
An immutable membership collection. Equality of contents is provided by equals; storage handles themselves have identity.
new(values: Dict(a, Nil))
fn(pooka/dict.Dict(a, Nil)) -> pooka/set.Set(a)Create the value from its declared fields. Public factory functions keep the storage details out of ordinary calling code.
to_list() -> List(a)
fn() -> List(a)Enumerate members in unspecified order.
import pooka/list
import pooka/set
assert list.contains(set.from_list([1, 2]).to_list(), 1)
insert(value: a) -> Set(a)
fn(a) -> pooka/set.Set(a)Return a set containing the value.
import pooka/set
assert set.empty().insert(1).contains(1)
delete(value: a) -> Set(a)
fn(a) -> pooka/set.Set(a)Return a set without the value; absence is harmless.
import pooka/set
assert set.from_list([1]).delete(1).is_empty()
contains(value: a) -> Bool
fn(a) -> BoolCheck whether a value is a member.
import pooka/set
assert set.from_list([1, 2]).contains(2)
size() -> Int
fn() -> IntCount distinct members.
import pooka/set
assert set.from_list([1, 1, 2]).size() == 2
is_empty() -> Bool
fn() -> BoolAsk whether the set has no members.
import pooka/set
assert set.empty().is_empty()
union(right: Set(a)) -> Set(a)
fn(pooka/set.Set(a)) -> pooka/set.Set(a)Keep members present in either set.
import pooka/set
assert set.from_list([1]).union(set.from_list([2])).size() == 2
intersection(right: Set(a)) -> Set(a)
fn(pooka/set.Set(a)) -> pooka/set.Set(a)Keep members present in both sets.
import pooka/set
assert set.from_list([1, 2]).intersection(set.from_list([2, 3])).equals(set.from_list([2]))
difference(right: Set(a)) -> Set(a)
fn(pooka/set.Set(a)) -> pooka/set.Set(a)Keep left-hand members absent from the right-hand set.
import pooka/set
assert set.from_list([1, 2]).difference(set.from_list([2])).equals(set.from_list([1]))
equals(right: Set(a)) -> Bool
fn(pooka/set.Set(a)) -> BoolCompare membership rather than the identity of captured dictionary storage.
import pooka/set
assert set.from_list([1, 2]).equals(set.from_list([2, 1]))
is_subset(right: Set(a)) -> Bool
fn(pooka/set.Set(a)) -> BoolRequire every member of this set to belong to the right-hand set.
import pooka/set
assert set.from_list([1]).is_subset(set.from_list([1, 2]))
empty() -> Set(a)
fn() -> pooka/set.Set(a)Open an empty set.
import pooka/set
assert set.empty().is_empty()
from_list(values: List(a)) -> Set(a)
fn(List(a)) -> pooka/set.Set(a)Build membership from a list, forgetting repeated values.
import pooka/set
assert set.from_list([1, 1, 2]).size() == 2