Я изучаю схему по ' Структура и интерпретация компьютерных программ '
В главе 1.3.2 Построение процедур с использованием лямбды .
Я понял лямбду следующим образом.
Значение, совпадающее с лямбда, записано вне скобок лямбды.
( (лямбда (x) (+ x 4) 4) ; (x) соответствует 4, результат равен 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: ожидает только 2 аргумента, но найдено 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 * Пример кода 1044 *.
Прав ли я по принципу лямбды?
Если я прав, почему SICP напиши как?