【问题标题】:What is the difference between (define (deriv-squared f ) (proc (deriv f))) and (define deriv-squared (proc deriv))?(define (deriv-squared f) (proc (deriv f))) 和 (define deriv-squared (proc deriv)) 有什么区别?
【发布时间】: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))

【问题讨论】:

    标签: scheme racket procedure


    【解决方案1】:

    变量在被引用(使用)之前需要有一个绑定。

    如果你有

    (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,那么一切正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-07
      • 2020-07-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多