public:cs:sicp

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
public:cs:sicp [2015/12/26 22:15] – [1.2 过程与它们所产生的计算] oakfirepublic:cs:sicp [2023/04/21 13:22] (当前版本) oakfire
行 1: 行 1:
 ====== 《计算机程序的构造与解释》笔记 ====== ====== 《计算机程序的构造与解释》笔记 ======
   * SICP:Structure and Interpretation of Computer Programs   * SICP:Structure and Interpretation of Computer Programs
-  * 本书使用 Lisp 方言 Scheme 来教学。ubuntu 14.04 可安装 ''scheme-r5rs''包(不知道为何没有 ''mit-scheme''包)+  * 本书使用 Lisp 方言 Scheme 来教学。ubuntu 14.04 可安装 ''scheme-r5rs''包(不知道为何没有 ''mit-scheme''包), (实际安装的包名为''scheme48''), 使用命令''scheme48''开启命令行。 
 +  * JS 版本在线阅读:[[https://sourceacademy.org/sicpjs/index|SICPJS]]
 ===== 第1章 构造过程抽象 ===== ===== 第1章 构造过程抽象 =====
 ==== 1.1 程序设计的基本元素 ==== ==== 1.1 程序设计的基本元素 ====
行 33: 行 34:
 <not <e>) <not <e>)
 </code> </code>
-  * 练习1.6 为什么不能由''conf''定义''if'',而重新提供一个''if''. 因为由定义的''if''在参与递归时会先求值参数而导致无限递归,所以需要一个能先执行判断条件(而不是先求所有参数值)的特殊形式。 +  * 练习1.6 为什么不能由''conf''定义''if'',而重新提供一个''if''. 因为由''conf''定义的''if''在参与递归时会先求值参数而导致无限递归,所以需要一个能先执行判断条件(而不是先求所有参数值)的特殊形式。 
-  * 1.1.8 //块结构//:允许一个过程带有局限此过程的内部定义。+  * 1.1.8 //块结构//分析了允许一个过程带有局限此过程的内部定义的必要性
 ==== 1.2 过程与它们所产生的计算 ==== ==== 1.2 过程与它们所产生的计算 ====
   * 1.2.1 线性的递归与迭代   * 1.2.1 线性的递归与迭代
行 50: 行 51:
  ; 即在<body>中的<var1>具有值<exp1>,且<var2>具有值<exp2>...<varn>具有值<expn>  ; 即在<body>中的<var1>具有值<exp1>,且<var2>具有值<exp2>...<varn>具有值<expn>
 </code> </code>
 +  * 1.3.3 过程作为一般性方法的应用,分析了 寻找方程根 f(x)=0 的区间折半方法等,详见书。
 +  * 1.3.4 过程作为返回值
 +    * 最少限制的可计算元素被称为具有//第一级//的状态,第一级元素性质包括:可用变量命名,可作为过程的参数,可作为过程的返回,可悲包含在数据结构中。
 +    * Lisp 给了过程完全的第一级状态,所有有效的实现是个挑战。其它程序语言或多或少加了某些限制。(但是现代语言这几年的发展基本包括了这些性质)
 +
 +===== 第2章 构造数据抽象 =====
 +  * 本章节大部分内容是关于怎么抽象数学运算,详细看书。
 +==== 2.1 数据抽象导引 ====
 +  * //序对//: <code scheme>(define x (cons 1 2))
 +
 +(car x)
 +1
 +(cdr x)
 +
 +</code>
 +  * 2.1.2 抽象屏障,多层次抽象,层次间为“屏障”,使用时可不用关心底层
 +  * 2.1.3 复合结构可用//过程//来表示,满足//消息传递//设计
 +==== 2.2 层次性数据和闭包性质 ====
 +  * 闭包性质:某种组合的操作得到的结果本身还可以通过同样的操作再进行组合。
 +  * ''cons'' 满足闭包性质;可建立起层次性的结构
 +  * 2.2.1 //序对//可构造//序列//, scheme 为方便提供了 ''list'' 基本操作
 +  * 表操作:''list-ref'', ''null?''; ''map''
 +  * 2.2.2 层次性结构: 序列表元素本身也是序列, 树
 +  * 树的 ''map''
 +  * 2.2.3 模块化结构设计:序列作为程序统一的表示结构,程序的依赖性转移对序列操作的顺序组合上。
 +  * 嵌套映射
 +  * 分层设计
 +
 +==== 2.3 符号数据 ====
 +  * 2.3.1 引号: 一个单引号放前表示作为数据对象看待,而不作为表达式。
 +  * 2.3.2 符号求导,代数表达式的表示
 +  * 2.3.3 集合的表示
 +  * 2.3.4 huffman编码树.
 +==== 2.4 抽象数据的多重表示 ====
 +  * 复数的表示:实虚表示,极坐标表示
 +  * 2.4.2 带**类型标志**的数据
 +  * 检查一个数据的类型,然后调用某个适当过程称为**基于类型的分派**
 +  * 数据导向的程序设计技术
 +  * 消息传递
 +==== 2.5 带有通用型操作的系统 ====
 +  * 这里思想类似面向对象程序设计,但是,书里注释说明,本书关心局部状态分析, 而不提“类”与“继承”,是因为现实问题是无法仅仅通过计算机语言设计的方式来合理处理的。
 +  * 多项式算术
 +
 +
 +
  
  
  • public/cs/sicp.1451139343.txt.gz
  • 最后更改: 2015/12/26 22:15
  • oakfire