【SICP练习】63 练习2.34
2015-09-08 00:00
218 查看
练习2.34
书中一开始有2个式子,一个是原式,一个根据Horner规则构造出的式子。而我们同样也可以将待求得式子写成这种方式,而且可以更进一步——那就是写成Lisp的前序表示:
(+ 1 (* x (+ 3 (* x (+ 0 (* x (+ 5 (* x(+ 0 x) ) ) ) ) ) ) ) )
由此可以观察得出lambda表达式里要做的是:
(+ this-coeff (* x (accumulate ......
通过不断的递归,最终就像上一题中图片所示的一样,accumulate最终会返回一个值,然后就开始计算不再递归了,空间需求也就开始缩小。
(define (horner-eval xcoefficient-sequence)
(accumulate (lambda (this-coeff higher-terms)
(+ this-coeff (* xhigher-terms)))
0
coefficient-sequence))
下面我们来测试一下。
(load “d:\\lisp\\accumulate-2.scm”)
(load “d:\\lisp\\horner-eval.scm”)
(horner-eval 2 ‘(1 3 0 5 0 1))
;Value: 79
版权声明:本文为 NoMasp柯于旺 原创文章,未经许可严禁转载!欢迎访问我的博客:http://blog.csdn.net/nomasp
练习2.34
书中一开始有2个式子,一个是原式,一个根据Horner规则构造出的式子。而我们同样也可以将待求得式子写成这种方式,而且可以更进一步——那就是写成Lisp的前序表示:
(+ 1 (* x (+ 3 (* x (+ 0 (* x (+ 5 (* x(+ 0 x) ) ) ) ) ) ) ) )
由此可以观察得出lambda表达式里要做的是:
(+ this-coeff (* x (accumulate ......
通过不断的递归,最终就像上一题中图片所示的一样,accumulate最终会返回一个值,然后就开始计算不再递归了,空间需求也就开始缩小。
(define (horner-eval xcoefficient-sequence)
(accumulate (lambda (this-coeff higher-terms)
(+ this-coeff (* xhigher-terms)))
0
coefficient-sequence))
下面我们来测试一下。
(load “d:\\lisp\\accumulate-2.scm”)
(load “d:\\lisp\\horner-eval.scm”)
(horner-eval 2 ‘(1 3 0 5 0 1))
;Value: 79
版权声明:本文为 NoMasp柯于旺 原创文章,未经许可严禁转载!欢迎访问我的博客:http://blog.csdn.net/nomasp
相关文章推荐
- 用环境模型来理解javascript中的闭包
- 对嵌套映射的理解
- SICP Exercise 1.13
- sicp习题答案和范例代码 - 第一章
- sicp习题答案和范例代码 - 第二章 2.1
- SICP第一章——构造过程抽象之程序设计的基本元素(1.1)笔记及习题解答
- SICP-《计算机程序的构造和解释》之习题分析与收获——练习1.30
- SICP-《计算机程序的构造和解释》之习题分析与收获——练习1.29
- 游走于数据与代码之间
- 换零钱问题迭代解法
- Structure and Interpretation of Computer Programs 读书笔记
- 应用序和正则序
- [SICP Notes] 1.1 The Elements of Programming
- 【Structure and interpretation of Computer Programs 】学习记录兼导言
- 第一章笔记整理
- SICP-练习2.34
- SICP-练习2.17
- 计算斐波纳契数,分析算法复杂度
- SICP-求幂
- SICP-换零钱方法的统计