 
 
 
 
 
   
 Next: 9.2 遅延評価の一般化
Up: 9 遅延評価(lazy evaluation)
 Previous: 9 遅延評価(lazy evaluation)
 
ストリームを作る関数を以下のように定義します.
 
(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)))
 
generated through LaTeX2HTML. M.Inaba 平成18年5月6日