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
posted @ 2024-09-30 17:04  再思即可  阅读(5)  评论(0编辑  收藏  举报