乐正

Actions speak louder than words.

Sicp-ex2-34

问题

对于$x$的某个给定值,求出一个多项式在$x$的值,也可以形式化为一种积累。假定需要求 下面多项式的值:

$$ a_nx^n + a_{n-1}x^{n-1} + \cdots + a_1x + a_0 $$

采用著名的Horner规则,可以构造出下面的计算:

$$ (\cdots (a_nx + a_{n-1})x + \cdots + a_1)x + a_0 $$

换句话说,我们可以从$a_n$开始,乘以$x$,再加上$a_{n-1}$乘以$x$,如此下去,直到 处理完$a_0$。请填充下面的模板,做出一个利用Horner规则求多项式值的过程。假定多项 式的系数安排在一个序列里面,从$a_0$直至$a_n$。

1
2
3
4
(define (honer-eval x coefficient-sequence)
  (accumulate (lambda (this-coeff higher-terms) <??>)
              0
              coefficient-sequence))

例如,为了计算$1 + 3x + 5x^3 + x^5$在$x = 2$的值,你需要求值:

1
(honer-eval 2 (lambda 1 3 0 5 0 1))

解答

练习2.34 (ex2-34.scm) download
1
2
3
4
5
6
7
8
;; Happy hacking Yuez - Emacs ♥ you!

(define (humer-eval x coefficient-sequence)
  (accumulate (lambda (this-coeff higher-terms)
                (+ this-coeff
                   (* x higher-terms)))
              0
              coefficient-sequence))

测试

1
2
3
4
5
(humer-eval 2 (list 1 3 0 5 0 1))
;Value: 79

(humer-eval 2 (list 5 1 4 3 3 1))
;Value: 127

draft

« sicp-ex2-33 sicp-ex2-35 »

Comments