Next: streams to, Previous: streams cons, Up: streams [Index]
Return a newly–allocated ‘stream’ containing in its elements the
objects in the list. Since the objects are given in a list, they are
evaluated when list->stream
is called, before the ‘stream’
is created. If the list of objects is null, as in (list->stream
'())
, the null ‘stream’ is returned. See also stream
.
Example:
(define strm123 (list->stream '(1 2 3))) ;; fails with divide-by-zero error (define s (list->stream (list 1 (/ 1 0) -1)))
Return a newly–allocated ‘stream’ containing in its elements the characters on the port. If port is not given it defaults to the current input port. The returned ‘stream’ has finite length and is terminated by ‘stream-null’.
It looks like one use of port->stream
would be this:
(define s ;wrong! (with-input-from-file filename (lambda () (port->stream))))
but that fails, because with-input-from-file
is eager, and closes
the input port prematurely, before the first character is read. To read
a file into a stream, use:
(define-stream (file->stream filename) (let ((p (open-input-file filename))) (stream-let loop ((c (read-char p))) (if (eof-object? c) (begin (close-input-port p) stream-null) (stream-cons c (loop (read-char p)))))))