**Exercise 2.34:** Evaluating a polynomial in x at a given value of x can be formulated as an accumulation. We evaluate
the polynomial \( p(x) = a_n x^n + a_{n-1}x^{n-1} + \cdots + a_1 x+ a_0 \) using a well-known algorithm called
Horner’s rule, which structures the computation as \( (\cdots (a_n x + a_{n-1})x + \cdots + a_1)x + a_0 \)
In other words, we start with \( a_n \), multiply by \( x \), add \( a_{n-1} \), multiply by \( x \), and
so on, until we reach \( a_0 \). Fill in the following template to produce a procedure that evaluates a polynomial
using Horner’s rule. Assume that the coefficients of the polynomial are arranged in a sequence, from \( a_0 \)
through \( a_n \).

```
(define (horner-eval x coefficient-sequence)
(accumulate (lambda (this-coeff higher-terms) <??>)
0
coefficient-sequence))
```

For example, to compute \( 1 + 3x + 5x^3 + x^5 \) at \( x = 2 \) you would evaluate

```
(horner-eval 2 (list 1 3 0 5 0 1))
```

I included a non-abstracted version of Horner’s method for clarity.

```
(define (accumulate fn init-value items)
(if (null? items)
init-value
(fn (car items)
(accumulate fn init-value (cdr items)))))
(define (he x coeff-seq)
(if (null? coeff-seq)
0
(+ (car coeff-seq)
(* x (he x (cdr coeff-seq))))))
(define (horner-eval x coeff-seq)
(accumulate (lambda (this-coeff higher-terms)
(+ this-coeff (* x higher-terms)))
0
coeff-seq))
```

```
> (horner-eval 2 (list 1 3 0 5 0 1))
79
> (horner-eval 2 (list 1))
1
> (horner-eval 2 (list ))
0
> (horner-eval 2 (list 1 1))
3
```