В книге Структура и интерпретация компьютерных программ Х. Абельсона и Дж. Дж. Суссмана с Дж. Суссманом accumulation
или fold-right
вводится в Раздел 2.2.3 следующим образом:
(define (accumulate op initial sequence)
(if (null? sequence)
initial
(op (car sequence)
(accumulate op initial (cdr sequence)))))
Я попытался использовать это, чтобы взять and
списка булевых переменных, написав:
(accumulate and
true
(list true true false))
Однако, это дало мне ошибку and: bad syntax
в DrRacket ( с #lang sicp
), и я должен был сделать это вместо:
(accumulate (lambda (x y) (and x y))
true
(list true true false))
Почему? Я полагаю, что это как-то связано с тем, как and
является особой формой, но я недостаточно понимаю Схему, чтобы сказать. Возможно, я просто упускаю очевидную ошибку ...