Integer sets represented as lists of intervals
1. Introduction
This module provides functions to work with sets of integers
represented as sorted lists of intervals, which are pairs of bounds.
For example, the set
{ 1, 2, 3, 4, 10, 11, 12, 80 }
is represented by the list
((1 . 4) (10 . 12) (80 . 80))
The functions provided here always ensure that the lists are valid and
in canonical form.
A list is valid if each of its intervals is valid. An interval is
valid if its upper bound is greater or equal to its lower bound.
A list is in canonical form if:
* all its intervals are strictly disjoint, that is they neither
overlap nor touch, and
* its intervals are sorted by increasing bounds.
2. Functions
Apart from the functions presented here, all functions working on
lists can be used, since the representation of integer sets is exposed
for that purpose.
2.1. Constructors
(intset-singleton element) -> integer-set
Return an integer set containing only the given ELEMENT.
(intset-range begin end) -> integer-set
Return an integer set composed of the integers in the range
[BEGIN,END] (i.e. both BEGIN and END are included).
2.2. Predicates
(intset? thing) -> boolean
Return true iff the given THING is a valid list of intervals in
canonical form, as defined above.
(intset-contains? element set) -> boolean
Return true iff SET contains ELEMENT.
2.3. Set operations
(intset-union set-1 set-2) -> integer-set
Return the union of the integer sets SET-1 and SET-2.
(intset-intersection set-1 set-2) -> integer-set
Return the intersection of the integer sets SET-1 and SET-2.
(intset-difference set-1 set-2) -> integer-set
Return the difference of the integer sets SET-1 and SET-2, that is
SET-1 \ SET-2.
(intset-adjoin element set) -> integer-set
Return a set containing the same elements as SET plus ELEMENT. Note:
the "lset-adjoin" function in SRFI-1 takes the set as first argument
and the element(s) as rest arguments. Since this argument ordering is
not coherent with the other functions, I decided not to copy it.
(intset-delete element set) -> integer-set
Return a set containing the same elements as SET but ELEMENT.
2.4. Iterators
(intset-map f set) -> list
Apply function F to the lower and upper bounds of all intervals in
SET, and return the list of all of F results.