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.