SICP读书笔记 1.1
SICP CONCLUSION
让我们举起杯,祝福那些将他们的思想镶嵌在重重括号之间的Lisp程序员 !
祝我能够突破层层代码,找到住在里计算机的神灵!
目录
1. 构造过程抽象
2. 构造数据抽象
3. 模块化、对象和状态
4. 元语言抽象
5. 寄存器机器里的计算
Chapter 1
- 构造过程对象
练习答案
程序设计的基本元素
强有力的程序设计语言,不仅是一种指挥计算机执行任务的方式,还应该提供一种框架,使我们能够自己有关计算过程的思想
- 基本表达形式 (过程 or 数据?)
- 组合的方法
- 抽象的方法
1. 表达式
2. 命名和环境(变量)
或许给变量命名就是语言中最小的抽象?
构造一个复杂的程序,就是为了去一步步地创建出越来越复杂的计算性对象
3. 组合式的求值
在环境中,先求解子表达式(一种递归
4. 复合过程
更强大的抽象方法:定义过程
5. 代换模型
一种简单的计算模型,简单的说明了实参代替形参
考虑科学研究或者工程中的现象,一般从最简单的模型开始,随着更细致的考虑问题,应该完善模型更换模型
应用序和正则序:取决于解释器的实现,更深层时应考虑两者的优缺点
6.条件表达式和谓词
7.实例:牛顿法求平方根
函数与过程之间的矛盾,不过是在描述一件事情的特征,与描述如何去做这件事之间的普遍性差异的一个具体反映
看一下书里怎么教我们用牛顿法求平方根
- 描述事情的解决思路:给出猜测,不断改进这个猜测,直到觉得满足
- 直接描述方法和各个部件,不管具体实现,抽象思想
(define (sqrt-iter guess x)
(if (good-enough? guess x)
guess
(sqrt-iter (improve guess x)
x)))
- 实现各个部件的细节 good-enough? improve
8. 过程作为黑箱抽象
- 将平方根问题自然的分解为若干个子问题
- 猜测足够好?
- 怎么改进?
- 过程抽象:分解过程,使之成为了可以独立工作的模块
- 隐藏一些细节,作为黑箱给其他程序员使用
一些细节
- 局部名、约束变量、作用域
一样的为了更高度的模块化,
- 内部定义和块结构
依旧是为了更高的模块化,屏蔽我内部的所有名称,更高度的黑盒
SICP读书笔记 1.1的更多相关文章
- 【SICP读书笔记(一)】正则序展开的特殊情况
scheme解释器有两种实现方式,一种是应用序,先对每个参数求值,再以首过程对所有求得的参数求值. 第二种是正则序,会“完全展开然后归约”(书中原文) SICP中的练习1.5,让我困惑了一下.原题如下 ...
- SICP读书笔记 3.5
SICP CONCLUSION 让我们举起杯,祝福那些将他们的思想镶嵌在重重括号之间的Lisp程序员 ! 祝我能够突破层层代码,找到住在里计算机的神灵! 目录 1. 构造过程抽象 2. 构造数据抽象 ...
- SICP读书笔记 3.4
SICP CONCLUSION 让我们举起杯,祝福那些将他们的思想镶嵌在重重括号之间的Lisp程序员 ! 祝我能够突破层层代码,找到住在里计算机的神灵! 目录 1. 构造过程抽象 2. 构造数据抽象 ...
- SICP读书笔记 3.2
SICP CONCLUSION 让我们举起杯,祝福那些将他们的思想镶嵌在重重括号之间的Lisp程序员 ! 祝我能够突破层层代码,找到住在里计算机的神灵! 目录 1. 构造过程抽象 2. 构造数据抽象 ...
- SICP读书笔记 3.3
SICP CONCLUSION 让我们举起杯,祝福那些将他们的思想镶嵌在重重括号之间的Lisp程序员 ! 祝我能够突破层层代码,找到住在里计算机的神灵! 目录 1. 构造过程抽象 2. 构造数据抽象 ...
- SICP读书笔记 3.1
SICP CONCLUSION 让我们举起杯,祝福那些将他们的思想镶嵌在重重括号之间的Lisp程序员 ! 祝我能够突破层层代码,找到住在里计算机的神灵! 目录 1. 构造过程抽象 2. 构造数据抽象 ...
- SICP读书笔记 2.5
SICP CONCLUSION 让我们举起杯,祝福那些将他们的思想镶嵌在重重括号之间的Lisp程序员 ! 祝我能够突破层层代码,找到住在里计算机的神灵! 目录 1. 构造过程抽象 2. 构造数据抽象 ...
- SICP读书笔记 2.4
SICP CONCLUSION 让我们举起杯,祝福那些将他们的思想镶嵌在重重括号之间的Lisp程序员 ! 祝我能够突破层层代码,找到住在里计算机的神灵! 目录 1. 构造过程抽象 2. 构造数据抽象 ...
- SICP读书笔记 2.3
SICP CONCLUSION 让我们举起杯,祝福那些将他们的思想镶嵌在重重括号之间的Lisp程序员 ! 祝我能够突破层层代码,找到住在里计算机的神灵! 目录 1. 构造过程抽象 2. 构造数据抽象 ...
随机推荐
- 【2017下集美大学软工1412班_助教博客】团队作业3——需求改进&系统设计团队成绩公示
作业要求 团队作业3--需求改进&系统设计 团队评分结果 Total QH BZ GJ MS SXX WBS SJ JG SJK JH NR CS PHILOSOPHER 需求改进&系 ...
- jquery ajax 设置请求头header 参数
$.ajax( { url:'http://127.0.0.1:30080/api-a/quasiCustom/selectCustomList', type:'post', dateType:'js ...
- jQ判断一个元素是否为空
// 方法一 if (!$('#jb51').html()) { //http://www.jb51.net 什么都没有找到; } // 方法二 if ($('#jb51').is(":em ...
- BZOJ4245:[ONTAK2015]OR-XOR(贪心)
Description 给定一个长度为n的序列a[1],a[2],...,a[n],请将它划分为m段连续的区间,设第i段的费用c[i]为该段内所有数字的异或和,则总费用为c[1] or c[2] or ...
- 利用RMAN恢复整个数据库
利用RMAN恢复整个数据库案例一 适合场合:恢复的目录一致,同时备份的过程中有归档日志 恢复的数据库目录和down机的数据库一致,还有一个就是RMAN备份的时候已经备份了归档日志. 备份脚本: run ...
- Maven配置本地库加载ojdbc14-10.2.0.4.0.jar文件
因为ojdbc14-10.2.0.4.0.jar是要收费的,所以Maven的远程库里没有这个资源,只能通过配置本地库来加载到J2EE工程里,做法如下: 第一步:在网上下载ojdbc14.jar,然 ...
- jenkins报错;自定义工作目录;
[1]no such file 报错: 如果jdk配置路径错误,有可能会报这样的错误: 其实只要在/etc/profile中配置好JAVA_HOME就足够了: 对应的系统配置框,留空不新加即可: [2 ...
- Python2.7-fnmacth
fnmatch 模块,提供了对 Unix shell 的规则的支持,类似正则,但不一样,匹配的规则只有3条:*, ?, 在 [] 里的任意字符 模块方法: fnmatch.fnmatch(filena ...
- Python2.7-time
time模块,与datetime模块功能有所重合,time较为简单明了,若只需要当前时间或日期或是sleep,直接用time模块,需要更复杂的时间间隔等情况用datetime模块更好 1.获得time ...
- Mapnik初学笔记
前言:夏天总是感觉想要睡觉,一心想颓废的我却要一周六天都要处于工作状态,但有些事虽然麻烦,但还是要去做,不由得想起火影忍者里面鹿丸这一个角色,有时候真能理解他的心理状态,或许我应该向他学习:善于思考的 ...