Common Lisp the Language, 2nd Edition
 
 
 
  
  
  
  
 

Generators are generalized input streams in the sense of
Smalltalk [20].  A generator can produce a potentially
unbounded number of elements of any type.  Individual elements are not
computed until requested by next-in.  When an element is taken from
a generator, it is removed by side effect.  Subsequent uses of 
next-in obtain later elements.
There is a close relationship between a generator and a series of the elements it produces. In particular, any series can be converted into a generator. As a result, all the scanner functions used for creating series (see appendix A) can be used to create generators as well. There is no need to have a separate set of functions for creating generators.
Gatherers are generalized output streams. Elements of any type can be entered into a gatherer using next-out. The gatherer combines the elements together in time-sequence order into a net result. This result can be retrieved using result-of.
There is a close relationship between a gatherer and a collector function
that combines elements in the same way.  In particular, any one-input
one-output collector can be converted into a gatherer.  As a result, all
the collectors used for computing summary results from series can be used to
create gatherers.  There is no need to have a separate set of functions for
creating gatherers.
 
 
 
  
  
  
 