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.