SICP 中的这一章说,actual-value提取 thunk 的真实值的定义是这样的:
(define (actual-value exp env)
(force-it (eval exp env)))
但是,如果exp它本身是一个 thunk 呢?根据它的定义,delay-it它意味着它是表单的列表对象(list 'thunk exp env)。然而eval函数并没有准备好处理以 'thunk. 为什么 eval 由于 cond 表达式不匹配而不会产生错误?
编辑: 我认为评估以下表达式应该会导致错误:
(define (add a) (+ 2 a))
(add 0)
add是一个复合过程,因此delay-it在应用它之前对其参数执行。+是一个原始生产,这意味着actual-value将在其参数上调用它。论据是 2 和 a。a 是一个 thunk 对象,因此actual-value在将它传递给 时应该会产生错误eval,因为eval没有处理带有 'thunk.