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

What is the difference between (define (deriv-squared f ) (proc (deriv f))) and (define deriv-squared (proc 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,则一切正常。