【发布时间】:2019-11-14 15:21:05
【问题描述】:
我正在通过'计算机程序的结构和解释'学习Scheme
在第 1.3.2 章 使用 lambda 构造过程。
我是这样理解 lambda 的。
与 lambda 匹配的值写在 lambda 括号外。
<b>(</b>(lambda (x) (+ x 4) <b>4)</b> ; (x) is matched to 4, result is 8
但是在SICP中,另一个示例代码是不同的。
代码是:
(define (sum x y) (+ x y))
(define (pi-sum a b)
(sum (lambda (x) (/ 1.0 (* x (+ x 3))))
a
(lambda (x) (+ x 4))
b
))
(pi-sum 3 6)
我认为如果(lambda (x) (/ 1.0 (* x (+ x 3)))) 想要匹配a,lambda 和a 必须用括号括起来。
但在示例代码中,不要使用括号。
当我运行这段代码时,会发生错误。
错误是这样的:
***'sum: expects only 2 arguments, but found 4'***
当我使用更多这样的括号时:
(define (sum x y) (+ x y))
(define (pi-sum a b)
(sum ((lambda (x) (/ 1.0 (* x (+ x 3))))
a)
((lambda (x) (+ x 4))
b)
))
(pi-sum 2 6) ; result is 10.1
代码已运行。
SICP 的示例代码让我很困惑。
我在lambda的原则上是对的吗?
如果我是对的,为什么 SICP 那样写?
【问题讨论】: