GNU-devel ELPA - stream


Implementation of streams
stream-, 2021-Oct-09, 50.0 KiB
Home page
Browse repository
CGit or Gitweb

To install this package, run in Emacs:

M-x package-install RET stream RET

Full description

This library provides an implementation of streams. Streams are
implemented as delayed evaluation of cons cells.

Functions defined in `seq.el' can also take a stream as input.

streams could be created from any sequential input data:
- sequences, making operation on them lazy
- a set of 2 forms (first and rest), making it easy to represent infinite sequences
- buffers (by character)
- buffers (by line)
- buffers (by page)
- IO streams
- orgmode table cells
- ...

All functions are prefixed with "stream-".
All functions are tested in tests/stream-tests.el

Here is an example implementation of the Fibonacci numbers
implemented as in infinite stream:

(defun fib (a b)
 (stream-cons a (fib b (+ a b))))
(fib 0 1)

A note for developers: Please make sure to implement functions that
process streams (build new streams out of given streams) in a way
that no new elements in any argument stream are generated.  This is
most likely an error since it changes the argument stream.  For
example, a common error is to call `stream-empty-p' on an input
stream and build the stream to return depending on the result.
Instead, delay such tests until elements are requested from the
resulting stream.  A way to achieve this is to wrap such tests into
`stream-make' or `stream-delay'.  See the implementations of
`stream-append' or `seq-drop-while' for example.

Old versions

stream- KiB