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月7日