Exercise 2.34
Evaluating a polynomial in x at a given value of x can be formulated as an accumulation. We evaluate the polynomial
a n x n + a n − 1 x n − 1 + . . . + a 1 x + a 0 a_nx^n+a_{n-1}x^{n-1}+...+a_1x+a_0 anxn+an−1xn−1+...+a1x+a0
using a well-known algorithm called H o r n e r ’ s r u l e Horner’s\ rule Horner’s rule, which structures the computation as
( . . . ( a n x + a n − 1 ) x + . . . + a 1 ) x + a 0 . (...(a_nx+a_{n-1})x+...+a_1)x+a_0. (...(anx+an−1)x+...+a1)x+a0.
In other words, we start with a n a_n an, multiply by x, add a n − 1 a_{n−1} an−1, multiply by x, and so on, until we reach a 0 a_0 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 a 0 a_0 a0 through a n a_n an.
(define (horner-eval x coefficient-sequence)
(accumulate (lambda (this-coeff higher-terms) <??>)
0
coefficient-sequence))
For example, to compute 1 + 3 x + 5 x 3 + x 5 1+3x+5x^3+x^5 1+3x+5x3+x5 at x = 2 x = 2 x=2 you would evaluate
(horner-eval 2 (list 1 3 0 5 0 1))
这道题挺简单的,主要是题目里给的参数名起的太好了,本来我还不知道咋写的,一看 this-coeff 和 higher-terms 这俩参数,瞬间就明白了。
(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))
; 执行结果
79