【发布时间】:2017-03-20 01:30:38
【问题描述】:
我作业中的代码没有错误:
(define (deriv-squared f)
(square-a-procedure (deriv f)))
但是当我将它定义如下时,它不会评估并说:“deriv as undefined”即使我定义了它。两种定义有什么区别?
(define deriv-squared (square-a-procedure deriv))
【问题讨论】:
我作业中的代码没有错误:
(define (deriv-squared f)
(square-a-procedure (deriv f)))
但是当我将它定义如下时,它不会评估并说:“deriv as undefined”即使我定义了它。两种定义有什么区别?
(define deriv-squared (square-a-procedure deriv))
【问题讨论】:
变量在被引用(使用)之前需要有一个绑定。
如果你有
(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-squared 之前定义了 deriv,那么一切正常。
【讨论】: