tomo/api/sets.md
2024-08-18 18:23:32 -04:00

298 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Sets
Sets represent an unordered collection of unique elements. These are
implemented using hash tables.
```tomo
a := {10, 20, 30}
b := {20, 30}
>> a:overlap(b)
= {20}
```
Heres the Markdown documentation for set functions:
---
## Set Functions
### `has`
**Description:**
Checks if the set contains a specified item.
**Usage:**
```tomo
has(set:{T}, item:T) -> Bool
```
**Parameters:**
- `set`: The set to check.
- `item`: The item to check for presence.
**Returns:**
`yes` if the item is present, `no` otherwise.
**Example:**
```tomo
>> {10, 20}:has(20)
= yes
```
---
### `add`
**Description:**
Adds an item to the set.
**Usage:**
```tomo
add(set:{T}, item: T) -> Void
```
**Parameters:**
- `set`: The mutable reference to the set.
- `item`: The item to add to the set.
**Returns:**
Nothing.
**Example:**
```tomo
>> nums:add(42)
```
---
### `add_all`
**Description:**
Adds multiple items to the set.
**Usage:**
```tomo
add_all(set:&{T}, items: [T]) -> Void
```
**Parameters:**
- `set`: The mutable reference to the set.
- `items`: The array of items to add to the set.
**Returns:**
Nothing.
**Example:**
```tomo
>> nums:add_all([1, 2, 3])
```
---
### `remove`
**Description:**
Removes an item from the set.
**Usage:**
```tomo
remove(set:&{T}, item: T) -> Void
```
**Parameters:**
- `set`: The mutable reference to the set.
- `item`: The item to remove from the set.
**Returns:**
Nothing.
**Example:**
```tomo
>> nums:remove(42)
```
---
### `remove_all`
**Description:**
Removes multiple items from the set.
**Usage:**
```tomo
remove_all(set:&{T}, items: [T]) -> Void
```
**Parameters:**
- `set`: The mutable reference to the set.
- `items`: The array of items to remove from the set.
**Returns:**
Nothing.
**Example:**
```tomo
>> nums:remove_all([1, 2, 3])
```
---
### `clear`
**Description:**
Removes all items from the set.
**Usage:**
```tomo
clear(set:&{T}) -> Void
```
**Parameters:**
- `set`: The mutable reference to the set.
**Returns:**
Nothing.
**Example:**
```tomo
>> nums:clear()
```
---
### `with`
**Description:**
Creates a new set that is the union of the original set and another set.
**Usage:**
```tomo
with(set:{T}, other: {T}) -> {T}
```
**Parameters:**
- `set`: The original set.
- `other`: The set to union with.
**Returns:**
A new set containing all items from both sets.
**Example:**
```tomo
>> {1, 2}:with({2, 3})
= {1, 2, 3}
```
---
### `overlap`
**Description:**
Creates a new set with items that are in both the original set and another set.
**Usage:**
```tomo
overlap(set:{T}, other: {T}) -> {T}
```
**Parameters:**
- `set`: The original set.
- `other`: The set to intersect with.
**Returns:**
A new set containing only items present in both sets.
**Example:**
```tomo
>> {1, 2}:overlap({2, 3})
= {2}
```
---
### `without`
**Description:**
Creates a new set with items from the original set but without items from another set.
**Usage:**
```tomo
without(set:{T}, other: {T}) -> {T}
```
**Parameters:**
- `set`: The original set.
- `other`: The set of items to remove from the original set.
**Returns:**
A new set containing items from the original set excluding those in the other set.
**Example:**
```tomo
>> {1, 2}:without({2, 3})
= {1}
```
---
### `is_subset_of`
**Description:**
Checks if the set is a subset of another set.
**Usage:**
```tomo
set:is_subset_of(other: {T}, strict: Bool = no) -> Bool
```
**Parameters:**
- `set`: The set to check.
- `other`: The set to compare against.
- `strict`: If `yes`, checks if the set is a strict subset (does not equal the other set).
**Returns:**
`yes` if the set is a subset of the other set (strictly or not), `no` otherwise.
**Example:**
```tomo
>> {1, 2}:is_subset_of({1, 2, 3})
= yes
```
---
### `is_superset_of`
**Description:**
Checks if the set is a superset of another set.
**Usage:**
```tomo
is_superset_of(set:{T}, other: {T}, strict: Bool = no) -> Bool
```
**Parameters:**
- `set`: The set to check.
- `other`: The set to compare against.
- `strict`: If `yes`, checks if the set is a strict superset (does not equal the other set).
**Returns:**
`yes` if the set is a superset of the other set (strictly or not), `no` otherwise.
**Example:**
```tomo
>> {1, 2, 3}:is_superset_of({1, 2})
= yes
```