在 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
的定义与本书所要定义的不同。