Streams, sometimes called lazy lists, are a sequential data structure containing elements computed only on demand. A stream is either null or is a pair with a stream in its cdr. Since elements of a stream are computed only when accessed, streams can be infinite. Once computed, the value of a stream element is cached in case it is needed again.
Note: These are not the same as Java 8 streams.
(require 'srfi-41) (define fibs (stream-cons 1 (stream-cons 1 (stream-map + fibs (stream-cdr fibs))))) (stream->list 8 fibs) ⇒ (1 1 2 3 5 8 13 21)
See the SRFI 41 specification for details.
The Kawa implementations builds on promises.
The stream-null
value is a promise that evaluates to the empty list.
The result of stream-cons
is an eager immutable pair whose
car
and cdr
properties return promises.