【问题标题】:Scheme: Proabably a typo in SICP. 1.3.2. Am I right?方案:可能是 SICP 中的一个错字。 1.3.2.我对吗?
【发布时间】:2021-01-02 18:43:01
【问题描述】:

在 SICP (1.3.2. page: 62) 中,有一个使用 lambda 查找 pi-sum 的解决方案。解决办法是:

(define (pi-sum a b)
  (sum (lambda (x) (/ 1.0 (* x (+ x 2))))
       a
       (lambda (x) (+ x 4))
       b))

但是,我觉得应该有一个括号括住((lambda (x) (+ x 4) b)。这样的程序会产生一个错误,说sum 期待number 但得到procedure

修改上面的代码没有错误。

(define (pi-sum a b)
  (sum ((lambda (x) (/ 1.0 (* x (+ x 2))))
       a)
       ((lambda (x) (+ x 4))
       b)))

如果我的理解有误,请纠正我。我认为这本书不会错。

【问题讨论】:

标签: scheme sicp


【解决方案1】:

本书中的pi-sum 过程使用了早先在1.3.1 中定义的高阶过程sumsum 过程将 ab 作为描述求和边界的参数,并将 termnext 作为参数描述如何从 a 创建一个术语,以及如何从当前a 中获取下一个atermnext 都需要procedures。这是书中sum的定义:

(define (sum term a next b)
  (if (> a b)
      0
      (+ (term a)
         (sum term (next a) next b))))

如果您在pi-sum 的定义中添加括号,您应该会得到一个异常,因为sum 需要四个参数,但现在只传递了两个。我不知道你为什么会收到类似“sum is expecting a number but getting a procedure”之类的错误,但我怀疑你对 sum 的定义与本书的意图。

【讨论】:

  • 对不起。这是我的错。我没有理解sum 过程,而是定义了自己的求和过程(define sum +)。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多