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