## Compact integer sets

The cis library implements compact integer sets, represented as a list of integer intervals. The usual set operations are provided. The advantage compared to ordered lists is that when many elements are contiguous, the actual size of the data structure may be much smaller than the cardinality of the set being represented. Most set operations are linear w.r.t. the size, not the cardinality of the set.

## Usage

(require-extension cis)

## Documentation

### Constants

`empty :: CIS `

The empty integer set.

### Procedures

cis?procedure

Returns #t if the given object is a compact integer set, #f otherwise.

empty?procedure

Returns #t if the given integer set is empty, #f otherwise.

subset?procedure

Returns #t if the first given integer set is a subset of the second given integer set, #f otherwise.

cardinalprocedure

Returns the cardinality of the given set.

in?procedure

Returns #t if the the given integer is contained in the given set, #f otherwise.

singletonprocedure

Returns an integer set consisting of the given element.

intervalprocedure

Returns an integer set consisting of the given interval of elements.

Adds the given element to the given set and returns the new set.

removeprocedure

Removes the given element from the given set and returns the new set.

shiftprocedure

Adds the given integer to all elements in the set and returns the new set.

unionprocedure

Returns the union of the two sets.

intersectionprocedure

Returns the intersection fo the two sets.

differenceprocedure

Subtracts the elements of the second given set from the elements of the first given set, and returns the resulting set.

get-minprocedure

Returns the minumum element of the set.

get-maxprocedure

Returns the maximum element of the set.

foreachprocedure

Applies the given procedure to every element of the set.

fold-leftprocedure

Left fold on the elements of the set.

fold-rightprocedure

Right fold on the elements of the set.

elementsprocedure

Returns a list containing all elements of the given set.

## Examples

``` (define a (add 4 (add 1 (add 5 empty))))
(elements a)
==> (5 4 1)
(elements b)
==> (8 3 2)
(elements (union a b))
==> (8 5 4 3 2 1)
```

### Author

cis is based on the Ocaml Cis library by SÃ©bastien FerrÃ©. The Chicken Scheme variant of cis is implemented by Ivan Raikov.

### Version history

1.2
Bug fix in union
1.1
Updated test script to return proper exit code
1.0
Initial release

```Copyright 2010-2012 Ivan Raikov and the Okinawa Institute of Science and Technology

This program is free software: you can redistribute it and/or modify