方案:可能是 SICP 中的拼写错误。 1.3.2.我对吗?
Scheme: Proabably a typo in SICP. 1.3.2. Am I right?
在 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)))
如果我的理解有误,请指正。我想这本书不会错的。
本书中的 pi-sum
过程使用了早先在 1.3.1 中定义的 higher-order 过程 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
的定义与书中的定义不同。
在 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)))
如果我的理解有误,请指正。我想这本书不会错的。
本书中的 pi-sum
过程使用了早先在 1.3.1 中定义的 higher-order 过程 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
的定义与书中的定义不同。