問題4.32 – SICP(計算機プログラムの構造と解釈)その206

問題4.32

3章のストリームと4.2.3節の遅延評価リストとの間の違いは、リストの car の部分を遅延評価するかどうかである。
以下のように4.2.3節の遅延評価リストでは、未定義の x, y を使ったリストを定義できる。

;;; L-Eval input:
(define st (cons x y))

;;; L-Eval value:
ok

;;; L-Eval input:
st

;;; L-Eval value:
(compound-procedure (m) ((m x y)) <procedure-env>)

3章のストリームでは、リスト(ストリーム) car 部分は遅延されないのでエラーとなる。

gosh> (define st (cons-stream x y))
*** ERROR: unbound variable: x
Stack Trace:
_______________________________________

cdr 部分は遅延される。

gosh> (define st (cons-stream '1 y))
st
gosh> st
(1 . #<closure (memo-proc memo-proc)>)
計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
«
»