(defmacro stream-cons (object stream) `(list ,object #'(lambda () ,stream))) (defun stream-first (stream) (first stream)) (defun stream-rest (strm) (funcall (second strm)))実行例は以下のようにストリームにstream-restでアクセスにいった時に計算 がなされる.
> (setq a (stream-cons (expt 2 2) (stream-cons (expt 2 3) 'empty-stream))) (4 (LAMBDA NIL (STREAM-CONS (EXPT 2 3) 'EMPTY-STREAM))) > (stream-rest a) (8 (LAMBDA NIL 'EMPTY-STREAM)) > a (4 (LAMBDA NIL (STREAM-CONS (EXPT 2 3) 'EMPTY-STREAM))) > (stream-rest (stream-rest a)) EMPTY-STREAM > a (4 (LAMBDA NIL (STREAM-CONS (EXPT 2 3) 'EMPTY-STREAM)))