1

SICP のこのactual-value章では、サンクの実際の値を抽出するための の定義は次のようになっています。

(define (actual-value exp env)
  (force-it (eval exp env)))

しかし、expそれ自体がサンクである場合はどうなるでしょうか。の定義に基づくと、delay-itそれはフォームのリスト オブジェクトであることを意味します(list 'thunk exp env)。ただし、eval関数は、「thunk. cond 式が一致しないために eval がエラーを生成しないのはなぜですか?

編集: 次の式を評価するとエラーが発生するはずだと思います:

(define (add a) (+ 2 a))
(add 0)

addは複合手続きであるため、delay-it適用される前にその引数に対して実行されます。+つまりactual-value、引数で呼び出されます。引数は 2 と a です。a は thunk オブジェクトです。したがって、actual-valueに渡すとエラーが発生するはずです。evalこれevalは、「thunk.

4

1 に答える 1