(defmacro encapsulate (form) `#'(lambda () ,form)) (defmacro expose (procedure) `(funcall ,procedure)) ;;; (defmacro stream-cons (object stream) `(list ,object (encapsulate ,stream))) (defun stream-first (stream) (first stream)) (defun stream-rest (stream) (expose (second stream))) (defun stream-endp (stream) (eq stream 'empty-stream))これでたとえば,
> (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-first a) 4 > (stream-first (stream-rest a)) 8となる.