Прежде всего, я бы сказал, что ваша процедура EXP1 работает на слишком низком уровне, чтобы ее можно было определить в терминах ACCUMULATE, и ради проницательности вместо этого переписайте ее в терминах сумм и факториалов:
(define (sum term a b)
(accumulate + 0 term a 1+ b))
(define (product term a b)
(accumulate * 1 term a 1+ b))
(define (identity x) x)
(define (fact n)
(if (= n 0)
1
(product identity 1 n)))
(define (exp1 x n)
(define (term i)
(/ (expon x i) (fact i)))
(sum term 1 n))
Теперь к вашему вопросу: причина, по которой вы получаете (EXP1 0 3)
→ 0, не более чем то, что вы забыли добавить 1 в начале серии, и просто вычисляете х / 1! + х ^ 2/2! + ... + x ^ n / n!
Изменение EXP1 для включения отсутствующего термина работает, как и ожидалось:
(define (exp1 x n)
(define (term i)
(/ (expon x i) (fact i)))
(+ 1 (sum term 1 n)))
=> (exp1 0 3)
1
=> (exp1 1 1)
2