我的作业中的代码无误地运行:
(define (deriv-squared f)
(square-a-procedure (deriv f)))
但是,当我将其定义如下时,它不会评估并说:“即使我定义它也是未定义的”。两个定义有什么区别?
(define deriv-squared (square-a-procedure deriv))
答案 0 :(得分:0)
变量需要在引用(使用)之前具有绑定。
如果你有
(define deriv-squared (square-a-procedure deriv))
然后评估(square-a-procedure deriv)
和结果值
名称为deriv-squared
。在评估(square-a-procedure deriv)
期间,查找了deriv
的值。因此:deriv
的定义必须放在deriv-squared
的定义之前。
(我的猜测是你已将deriv
的定义放在源文件中了。)
为什么你的第一个定义有效?
(define (deriv-squared f) (square-a-procedure (deriv f)))
这是以下内容的缩写:
(define deriv-squared
(lambda (f)
(square-a-procedure (deriv f))))
这里(lambda (f) (square-a-procedure (deriv f))))
评估了一个程序。
但是在使用该过程之前不会引用deriv
。因此,如果在使用deriv
之前定义deriv-squared
,一切正常。