2.34
; Evaluating a polynomial in x at a given value of x can be formulated as an
; accumulation. We evaluate the polynomial,
; a_nx^n + a_(n-1)x^n + ... + a_1x + a_0
; using a well-known algorithm called Horner’s rule, which structures the
; computation as,
; (... (a_nx + a_(n-1))x + ... a1)x + a_0
; In other words, we start with an, multiply by x, add a_(n−1), multiply by x,
; and so on, until we reach a0
; 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 a0 through an.
; (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))
(define nil '())
(define (accumulate op initial sequence)
(if (null? sequence)
initial
(op (car sequence) (accumulate op initial (cdr sequence)))))
(define (horner-eval x coefficient-sequence)
(accumulate
(lambda (this-coeff higher-terms)
(+ (* higher-terms x) this-coeff))
0
coefficient-sequence))
(horner-eval 2 (list 1 3 0 5 0 1)) ;Value: 79