 
 
 
 
 
   
 Next: 9.3 memoizationの追加
Up: 9 遅延評価(lazy evaluation)
 Previous: 9.1 遅延評価の実現
 
遅延評価を行なう部分は以下のような一般的な
手続きencapsulate, exposeで可能となります.
 
(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
となります.
 
generated through LaTeX2HTML. M.Inaba 平成18年5月6日