方案:可能是 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获取下一个a的参数。termnext都需要是程序。以下是书中对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的定义与本书所要定义的不同。

最新更新