Enumerators
Enumerations are the foundation of collections and are designed to
provide the convenience of Lisp's list interface (e.g., null,
car, cdr) for all collections.
In defining a new collection class, a user must implement at minimum
an enumerator class and the enumeration protocol: enum,
fin?, nxt, and now.
For efficiency, users might choose to override more methods such as
len, elt, elt-setter, etc.
Enumeration behavior is undefined if an enumerator is modified during
enumeration.
<enum> | (<any>) | C |
enum | (x|<col> => <enum>) | G |
| returns initial enum for iterating over x. | |
fin? | (x|<enum> => <log>) | G |
| returns true iff no more elements exist from given enum x. | |
nxt | (x|<enum> => <enum>) | G |
| returns enum pointing to next element in enum x. | |
now | (x|<enum> => <any>) | G |
| returns current element given enum x. | |
now-setter | (v x|<enum>) | G |
| sets current element given enum x to v. | |
now-key | (x|<enum> => <any>) | G |
| returns current key given enum x. | |
FOR | (FOR (,for-clause ...) ,@body) | S |
| parallel iteration over collections using enumerations. | |
|
where
,for-clause | == (,var ,col) | ((tup ,keyvar ,var) ,col) | L |
| specifies one parallel iteration over a collection ,col
binding successive values to ,var and optionally keys to
,keyvar. | |
|