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

問題4.19

次の式を評価した際の結果について。

(let ((a 1))
     (define (f x)
       (define b (+ a x))
       (define a 5)
       (+ a b))
     (f 10))

Ben の主張する define に逐次規則を使って結果を得る場合。

;;; M-Eval input:
(let ((a 1))
     (define (f x)
       (define b (+ a x))
       (define a 5)
       (+ a b))
     (f 10))

;;; M-Eval value:
16

Alyssa の主張する"問題4.16"での実装を使って結果を得る場合。

;;; M-Eval input:
(let ((a 1))
     (define (f x)
       (define b (+ a x))
       (define a 5)
       (+ a b))
     (f 10))
*** ERROR: Unassigned variable -- LOOKUP-VARIABLE-VALUE a

Eva の主張する"定義は同時"と見なす実装を使って結果を得る場合。
Gauche の実装がこのパターンに相当する?

gosh> (let ((a 1))
     (define (f x)
       (define b (+ a x))
       (define a 5)
       (+ a b))
     (f 10))
20

と思ったら、次の様な解説が。Gauche は Alyssa の解釈らしい。
Scheme:内部defineの評価順

計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
«
»