; ArrowLISP streams
; Copyright (C) 2006 Nils M Holm. All rights reserved.
; See the file LICENSE of the ArrowLISP distribution
; for conditions of use.
(define streams 't)
(package streams)
(define (stream v first rest lim)
(letrec
((stream (lambda (v)
(lambda ()
(cond ((lim v) :f)
(t (cons (first v)
(stream (rest v)))))))))
((stream v))))
(define (list->stream v)
(stream v car cdr null))
(define (stream->list s)
(letrec
((stream->list (lambda (s lst)
(cond (s (stream->list ((cdr s))
(cons (car s) lst)))
(t (reverse lst))))))
(stream->list s ())))
(define (map-stream f s)
(stream s (lambda (s) (f (car s)))
(lambda (s) ((cdr s)))
(lambda (s) (eq :f s))))
(package)
syntax highlighted by Code2HTML, v. 0.9.1