Series
A library providing data structure that combines aspects of sequences, (lazy) streams and loops, using a technique known as “fusion” or “deforestation”. Unlike sequences, in most cases operations on series may be composed functionally but execute iteratively without generating intermediate values. So series offer both the expressiveness of functional programming and the efficiency of iterative programming.

Series is in Quicklisp:

 (ql:quickload :series)
 (in-package :series)

The library was originally developed by Richard C. Waters, and a description of it appeared in 1990 as Appendix A of the second edition of the book Common Lisp - The Language by Guy L. Steele. More docs and examples can be found in AIM 1082 and AIM 1083 from MIT.

The project (SourceForge) is now maintained by Fernando D. Mato Mira. It has a git repo at SourceForge and an unofficial GitHub mirror.

Series is available for SBCL, CMUCL, CLISP and some commercial Common Lisp implementations. It is distributed under the terms of the MIT license.

Documentation

There are more user doc and links on the github mirror's wiki.

Many examples in the iteration page of the CL Cookbook.

Related projects

See taps, a library that offers conveniences to work with Series (take, tail, any, contains?, drop, filter, …)

Articles

See http://malisper.me/2016/04/13/loops-in-lisp-part-4-series/.


data structure, language extension