如何解决方案:可能是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中定义的高阶过程sum
。 sum
过程将a
和b
作为描述求和范围的参数,并将term
和next
作为描述如何创建的参数a
中的术语,以及如何从当前a
中获取下一个a
。 term
和next
都必须是过程。这是本书中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 举报,一经查实,本站将立刻删除。