# cl-utilities manual

Everybody writes some utilities because they're not part of the standard but they're so broadly useful. This results in a lot of wheel reinvention, and most reinventions are not as good as they should be. The cl-utilities project is an actively maintained collection of some of these utilities, with high-quality public-domain implementations and decent documentation.

## Table of contents:

- SPLIT-SEQUENCE, SPLIT-SEQUENCE-IF, SPLIT-SEQUENCE-IF-NOT. Used for splitting sequences.
- EXTREMUM, EXTREMA, N-MOST-EXTREME: Finding extreme values in sequences based on user-defined criteria.
- READ-DELIMITED reads from a sequence delimited somehow, in a somewhat inconvenient but hopefully efficient way.
- EXPT-MOD, an interface for calculating `(mod (expt n e) m)` efficiently across implementations.
- WITH-UNIQUE-NAMES, née WITH-GENSYMS. A classic macro-writing macro for preventing variable capture.
- COLLECTING, WITH-COLLECTORS. Some macros for clearly and efficiently collecting items into lists.
- ONCE-ONLY, a classic macro-writing macro for preventing multiple evaluation.
- ROTATE-BYTE rotates bits in a byte
- COPY-ARRAY shallow copies arrays.
- COMPOSE. Composes functions.

Public domain, maintained by Peter Scott. For more information, see the home page.