微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

方案:可能是SICP中的错字 1.3.2我对吗?

如何解决方案:可能是SICP中的错字 1.3.2我对吗?

在SICP(1.3.2。页面: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)))

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

解决方法

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

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

如果在pi-sum的定义中添加括号,则应该得到一个例外,因为sum需要四个参数,但是现在仅传递了两个。我不确定您为什么会收到错误消息,例如“ sum期望number却得到procedure ”,但是我怀疑您的情况有所不同sum的定义超出了本书的定义。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。