Class pl.Set
A Set class.
> Set = require 'pl.Set' > = Set{'one','two'} == Set{'two','one'} true > fruit = Set{'apple','banana','orange'} > = fruit['banana'] true > = fruit['hazelnut'] nil > colours = Set{'red','orange','green','blue'} > = fruit,colours [apple,orange,banana] [blue,green,orange,red] > = fruit+colours [blue,green,apple,red,orange,banana] [orange] > more_fruits = fruit + 'apricot' > = fruit*colours = more_fruits, fruit banana,apricot,apple,orange] [banana,apple,orange]
Dependencies: pl.utils, pl.tablex, pl.class, pl.Map, (pl.List if __tostring is used)
Methods
| pl.set:Set (t) | create a set. | 
| pl.set:values (self) | get a list of the values in a set. | 
| pl.set:map (self, fn, ...) | map a function over the values of a set. | 
| pl.set:union (self, set) | union of two sets (also +). | 
| pl.set:intersection (self, set) | intersection of two sets (also *). | 
| pl.set:difference (self, set) | new set with elements in the set that are not in the other (also -). | 
| pl.set:issubset (self, set) | is the first set a subset of the second (also <)?. | 
| pl.set:isempty (self) | is the set empty?. | 
| pl.set:isdisjoint (s1, s2) | are the sets disjoint? | 
| pl.set:len (s) | size of this set (also # for 5.2). | 
Metamethods
| pl.set:__tostring () | string representation of a set. | 
| pl.set:__add () | union of sets. | 
| pl.set:__mul () | intersection of sets. | 
| pl.set:__sub () | difference of sets. | 
| pl.set:__pow () | symmetric difference of sets. | 
| pl.set:__lt () | first set subset of second? | 
| pl.set:__len () | cardinality of set (5.2). | 
| pl.set:__eq (s1, s2) | equality between sets. | 
Methods
- pl.set:Set (t)
- 
    create a set.  
 Parameters:- t may be a Set, Map or list-like table.
 
- pl.set:values (self)
- 
    get a list of the values in a set.
    Parameters:- self a Set
 Returns:- 
        a list
    
 
- pl.set:map (self, fn, ...)
- 
    map a function over the values of a set.
    Parameters:- self a Set
- fn a function
- ... extra arguments to pass to the function.
 Returns:- 
        a new set
    
 
- pl.set:union (self, set)
- 
    union of two sets (also +).
    Parameters:- self a Set
- set another set
 Returns:- 
        a new set
    
 
- pl.set:intersection (self, set)
- 
    intersection of two sets (also *).
    Parameters:- self a Set
- set another set
 Returns:- 
        a new set
    
 Usage:> s = Set{10,20,30} > t = Set{20,30,40} > = t [20,30,40] > = Set.intersection(s,t) [30,20] > = s*t [30,20] 
- pl.set:difference (self, set)
- 
    new set with elements in the set that are not in the other (also -).
    Parameters:- self a Set
- set another set
 Returns:- 
        a new set
    
 
- pl.set:issubset (self, set)
- 
    is the first set a subset of the second (also <)?.
    Parameters:- self a Set
- set another set
 Returns:- 
        true or false
    
 
- pl.set:isempty (self)
- 
    is the set empty?.
    Parameters:- self a Set
 Returns:- 
        true or false
    
 
- pl.set:isdisjoint (s1, s2)
- 
    are the sets disjoint?  (no elements in common).
 Uses naive definition, i.e. that intersection is empty
    Parameters:- s1 a Set
- s2 another set
 Returns:- 
        true or false
    
 
- pl.set:len (s)
- 
    size of this set (also # for 5.2).
    Parameters:- s a Set
 Returns:- 
        size
    
 
Metamethods
- pl.set:__tostring ()
- string representation of a set.
- pl.set:__add ()
- union of sets.
- pl.set:__mul ()
- intersection of sets.
- pl.set:__sub ()
- difference of sets.
- pl.set:__pow ()
- symmetric difference of sets.
- pl.set:__lt ()
- first set subset of second?
- pl.set:__len ()
- cardinality of set (5.2).
- pl.set:__eq (s1, s2)
- 
    equality between sets.
    Parameters:- s1
- s2