(define(deriv-squared f)(proc(deriv f)))和(define deriv-squared(proc deriv))之间有什么区别?

时间:2016-11-06 18:09:44

标签: scheme racket procedure

我的作业中的代码无误地运行:

(define (deriv-squared f)
(square-a-procedure (deriv f)))

但是,当我将其定义如下时,它不会评估并说:“即使我定义它也是未定义的”。两个定义有什么区别?

(define deriv-squared (square-a-procedure deriv))

1 个答案:

答案 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,一切正常。