Implement Set stdlib (#335)

* Implement Set stdlib

* Rename an argument of the function Set.fold

* Add docs for Set stdlib

* Correct the usage of articles in the docs

* Fix bug

* Fix the link to Set stdlib section

Co-authored-by: Radosław Rowicki <35342116+radrow@users.noreply.github.com>
This commit is contained in:
Gaith Hallak
2021-08-07 11:08:45 +03:00
committed by GitHub
parent 4896ad3b36
commit 3029bf31cb
3 changed files with 175 additions and 0 deletions
+123
View File
@@ -39,6 +39,7 @@ include "List.aes"
- [Triple](#Triple)
- [BLS12_381](#BLS12_381)
- [Frac](#Frac)
- [Set](#set-stdlib)
# Builtin namespaces
@@ -2274,3 +2275,125 @@ accept arbitrary `frac`s from the surface you should report it as a
If you expect getting calls with malformed `frac`s in your contract, you should use
this function to verify the input.
## <a name='set-stdlib'>Set</a>
### Types
```
record set('a) = { to_map : map('a, unit) }
```
### Functions
#### new
```
Set.new() : set('a)
```
Returns an empty set
#### member
```
member(e : 'a, s : set('a)) : bool
```
Checks if the element `e` is present in the set `s`
#### insert
```
insert(e : 'a, s : set('a)) : set('a)
```
Inserts the element `e` in the set `s`
#### delete
```
Set.delete(e : 'a, s : set('a)) : set('a)
```
Removes the element `e` from the set `s`
#### size
```
size(s : set('a)) : int
```
Returns the number of elements in the set `s`
#### to_list
```
Set.to_list(s : set('a)) : list('a)
```
Returns a list containing the elements of the set `s`
#### from_list
```
Set.from_list(l : list('a)) : set('a)
```
Turns the list `l` into a set
#### filter
```
Set.filter(p : 'a => bool, s : set('a)) : set('a)
```
Filters out elements of `s` that fulfill predicate `p`
#### fold
```
Set.fold(f : ('a, 'b) => 'b, acc : 'b, s : set('a)) : 'b
```
Folds the function `f` over every element in the set `s` and returns the final value of the accumulator `acc`.
#### subtract
```
Set.subtract(s1 : set('a), s2 : set('a)) : set('a)
```
Returns the elements of `s1` that are not members of `s2`
#### intersection
```
Set.intersection(s1 : set('a), s2 : set('a)) : set('a)
```
Returns the intersection of the two sets `s1` and `s2`
#### intersection_list
```
Set.intersection_list(sets : list(set('a))) : set('a)
```
Returns the intersection of all the sets in the given list
#### union
```
Set.union(s1 : set('a), s2 : set('a)) : set('a)
```
Returns the union of the two sets `s1` and `s2`
#### union_list
```
Set.union_list(sets : list(set('a))) : set('a)
```
Returns the union of all the sets in the given list