sicp每日一题[2.34]
Exercise 2.34
Evaluating a polynomial in x at a given value of x can be formulated as an accumulation. We evaluate the polynomial
an x^n + a{n-1} x^(n-1) + ... + a1 x + a0
using a well-known algorithm called Horner's rule, which structures the computation as
(...(an x + 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))
这道题挺简单的,主要是题目里给的参数名起的太好了,本来我还不知道咋写的,一看 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