灯下 登录
计算机科学 / SICP / 2.2.3 Sequences as Conventional Interfaces

Exercise 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
a
n

x
n

+

a

n

1

x

n

1

+

+

a
1

x

+

a
0
using a well-known algorithm called
Horner’s rule, which structures
the computation as
(

(

a
n

x

+

a

n

1

)
x

+

+

a
1

)
x

+

a
0

.
In other words, we start with a
n, multiply by x, add
a

n

1, multiply by x, and so on, until we reach
a
0.

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 through a
n.

(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 at x
=
2 you
would evaluate

(horner-eval 2 (list 1 3 0 5 0 1))

练习 2.34:在给定 x 值处对多项式求值,可以表述为一种累积操作。我们用一种称为霍纳规则 (Horner's rule) 的著名算法来对多项式

a_n x^n + a_{n-1} x^{n-1} + ⋯ + a_1 x + a_0

求值,该算法将计算组织为

(⋯((a_n x + a_{n-1}) x + ⋯ + a_1) x + a_0)。

换句话说,从 a_n 开始,乘以 x,加上 a_{n-1},再乘以 x,如此类推,直到加上 a_0。

填写下列模板,产生一个用霍纳规则对多项式求值的过程。假设多项式的各系数按从 a_0 到 a_n 的顺序排列在一个序列中。

(define
(horner-eval x coefficient-sequence)
(accumulate
(lambda (this-coeff higher-terms)
⟨??⟩)
0
coefficient-sequence))

例如,要在 x = 2 处计算 1 + 3x + 5x^3 + x^5,可以求值

(horner-eval 2 (list 1 3 0 5 0 1))

Racket #lang sicp
(define
 (horner-eval x coefficient-sequence)
 (accumulate
 (lambda (this-coeff higher-terms)
 ⟨??⟩)
 0
 coefficient-sequence))
Racket #lang sicp
(horner-eval 2 (list 1 3 0 5 0 1))