...
 
Commits (6)
    https://gitcode.net/OpenDocCN/sicp-js-zh/-/commit/3b45909646a3ba4f96c4f87bd44ceca3bc8c4a76 update CNAME 2023-06-21T16:38:11+08:00 布客飞龙 562826179@qq.com https://gitcode.net/OpenDocCN/sicp-js-zh/-/commit/0b71c42769774062c616f2e44544de3c7e6519a9 update README.md 2023-06-21T18:07:59+08:00 布客飞龙 562826179@qq.com https://gitcode.net/OpenDocCN/sicp-js-zh/-/commit/d1237513acd60c0c3932e8038d2d4483886e4ba0 update README.md 2023-06-21T18:38:07+08:00 布客飞龙 562826179@qq.com https://gitcode.net/OpenDocCN/sicp-js-zh/-/commit/77d584a7761d92eda49198ef4b446db909d52f10 update index.html 2023-06-21T18:54:14+08:00 布客飞龙 562826179@qq.com https://gitcode.net/OpenDocCN/sicp-js-zh/-/commit/90b78c6b80256ac78c0d46e142e0a989a6eac159 update NAV.md 2023-06-21T22:54:57+08:00 布客飞龙 562826179@qq.com https://gitcode.net/OpenDocCN/sicp-js-zh/-/commit/54f260ceaae0b9a761370c14e0a445b676028b9a 2024-01-20 21:46:09 2024-01-20T21:46:09+08:00 wizardforcel 562826179@qq.com
sicp-js.apachecn.org
\ No newline at end of file
sicp-js.flygon.net
\ No newline at end of file
此差异已折叠。
# NUS CS1101s SICP JavaScript 描述
# NUS CS1101S:SICP JavaScript 描述
![](cover.jpg)
> 原文:[https://sicp.comp.nus.edu.sg/index.html](https://sicp.comp.nus.edu.sg/index.html)
> 原文:[SICP JavaScript](https://sourceacademy.org/sicpjs)
>
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
> 译者:[飞龙](https://github.com/wizardforcel)
>
> 协议:[CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/)
>
> 如果你交给某人一个程序,你将折磨他一整天;如果你教某人如何编写程序,你将折磨他一辈子。——David Leinweber
* [在线阅读](https://sicp-js.apachecn.org)
* [在线阅读(Gitee)](https://apachecn.gitee.io/sicp-js-zh/)
* [ApacheCN 面试求职交流群 724187166](https://jq.qq.com/?_wv=1027&k=54ujcL3)
* [ApacheCN 学习资源](http://www.apachecn.org/)
## 贡献指南
本项目需要校对,欢迎大家提交 Pull Request。
> 请您勇敢地去翻译和改进翻译。虽然我们追求卓越,但我们并不要求您做到十全十美,因此请不要担心因为翻译上犯错——在大部分情况下,我们的服务器已经记录所有的翻译,因此您不必担心会因为您的失误遭到无法挽回的破坏。(改编自维基百科)
## 联系方式
### 负责人
* [飞龙](https://github.com/wizardforcel): 562826179
### 其他
* 在我们的 [apachecn/sicp-js-zh](https://github.com/apachecn/sicp-js-zh) github 上提 issue.
* 发邮件到 Email: `apachecn@163.com`.
* 在我们的 [组织学习交流群](http://www.apachecn.org/organization/348.html) 中联系群主/管理员即可.
* [在线阅读](https://sicp-js.flygon.net)
## 下载
......@@ -41,14 +22,6 @@ docker run -tid -p <port>:80 apachecn0/sicp-js-zh
# 访问 http://localhost:{port} 查看文档
```
### PYPI
```
pip install sicp-js-zh
sicp-js-zh <port>
# 访问 http://localhost:{port} 查看文档
```
### NPM
```
......@@ -57,6 +30,6 @@ sicp-js-zh <port>
# 访问 http://localhost:{port} 查看文档
```
## 赞助我
## 赞助我
![](http://data.apachecn.org/img/about/donate.jpg)
![](https://img-blog.csdnimg.cn/20200112005920729.png)
+ [前言](docs/123.md)
+ [前言](docs/124.md)
+ [来自SICP,1996年第二版的致谢](docs/125.md)
+ [1具有功能的建筑抽象](docs/2.md)
+ [1.1编程要素](docs/3.md)
+ [1.1.1表达式](docs/4.md)
+ [1.1.2命名与环境](docs/5.md)
+ [1.1.3评估算子组合](docs/6.md)
+ [1.1.4功能](docs/7.md)
+ [1.1.5功能应用的替代模型](docs/8.md)
+ [1.1.6条件表达式和谓词](docs/9.md)
+ [1.1.7示例:牛顿法求平方根](docs/10.md)
+ [1.1.8充当黑盒抽象](docs/11.md)
+ [1.2函数及其生成的过程](docs/12.md)
+ [1.2.1线性递归和迭代](docs/13.md)
+ [1.2.2树递归](docs/14.md)
+ [1.2.3增长顺序](docs/15.md)
+ [1.2.4求幂](docs/16.md)
+ [1.2.5最大公约数](docs/17.md)
+ [1.2.6示例:测试原始性](docs/18.md)
+ [1.3用高阶函数表示抽象](docs/19.md)
+ [1.3.1函数作为参数](docs/20.md)
+ [1.3.2函数定义表达式](docs/21.md)
+ [1.3.3通用方法](docs/22.md)
+ [1.3.4作为返回值的功能](docs/23.md)
+ [2使用数据构建抽象](docs/24.md)
+ [2.1数据抽象导论](docs/25.md)
+ [2.1.1示例:有理数的算术运算](docs/26.md)
+ [2.1.2抽象壁垒](docs/27.md)
+ [2.1.3数据意味着什么?](docs/28.md)
+ [2.1.4扩展练习:区间算术](docs/29.md)
+ [2.2分层数据和闭包属性](docs/30.md)
+ [2.2.1表示序列](docs/31.md)
+ [2.2.2层次结构](docs/32.md)
+ [2.2.3序列作为常规接口](docs/33.md)
+ [2.2.4示例:图片语言](docs/34.md)
+ [2.3符号数据](docs/35.md)
+ [2.3.1字符串](docs/36.md)
+ [2.3.2示例:符号区分](docs/37.md)
+ [2.3.3示例:表示集](docs/38.md)
+ [2.3.4示例:霍夫曼编码树](docs/39.md)
+ [2.4抽象数据的多种表示形式](docs/40.md)
+ [2.4.1复数的表示形式](docs/41.md)
+ [2.4.2标记数据](docs/42.md)
+ [2.4.3数据定向编程和可加性](docs/43.md)
+ [2.5具有通用操作的系统](docs/44.md)
+ [2.5.1通用算术运算](docs/45.md)
+ [2.5.2组合不同类型的数据](docs/46.md)
+ [2.5.3示例:符号代数](docs/47.md)
+ [3模块化,对象和状态](docs/48.md)
+ [3.1分配和当地状态](docs/49.md)
+ [3.1.1局部状态变量](docs/50.md)
+ [3.1.2引入作业的好处](docs/51.md)
+ [3.1.3引入作业的成本](docs/52.md)
+ [3.2评价的环境模型](docs/53.md)
+ [3.2.1评估规则](docs/54.md)
+ [3.2.2应用简单功能](docs/55.md)
+ [3.2.3框架作为本地状态的存储库](docs/56.md)
+ [3.2.4内部定义](docs/57.md)
+ [3.3使用可变数据建模](docs/58.md)
+ [3.3.1可变列表结构](docs/59.md)
+ [3.3.2表示队列](docs/60.md)
+ [3.3.3代表表](docs/61.md)
+ [3.3.4数字电路仿真器](docs/62.md)
+ [3.3.5约束的传播](docs/63.md)
+ [3.4并发:时间是关键](docs/64.md)
+ [3.4.1并发系统中时间的本质](docs/65.md)
+ [3.4.2控制并发的机制](docs/66.md)
+ [3.5流](docs/67.md)
+ [3.5.1流是延迟列表](docs/68.md)
+ [3.5.2无限流](docs/69.md)
+ [3.5.3利用流范例](docs/70.md)
+ [3.5.4流和延迟评估](docs/71.md)
+ [3.5.5功能程序的模块化和对象的模块化](docs/72.md)
+ [4元语言抽象](docs/73.md)
+ [4.1元圆评估者](docs/74.md)
+ [4.1.1评估者的核心](docs/75.md)
+ [4.1.2表示语句和表达式](docs/76.md)
+ [4.1.3评估者数据结构](docs/77.md)
+ [4.1.4以程序运行评估器](docs/78.md)
+ [4.1.5数据作为程序](docs/79.md)
+ [4.1.6内部声明](docs/80.md)
+ [4.1.7将句法分析与执行分开](docs/81.md)
+ [4.2惰性评估](docs/82.md)
+ [4.2.1正常订单和适用订单](docs/83.md)
+ [4.2.2惰性评估口译员](docs/84.md)
+ [4.2.3流作为惰性列表](docs/85.md)
+ [4.3非确定性计算](docs/86.md)
+ [4.3.1搜寻和搜寻](docs/87.md)
+ [4.3.2非确定性程序的示例](docs/88.md)
+ [4.3.3实施环境评估者](docs/89.md)
+ [4.4逻辑编程](docs/90.md)
+ [4.4.1演绎信息检索](docs/91.md)
+ [4.4.2查询系统如何工作](docs/92.md)
+ [4.4.3逻辑编程是数学逻辑吗?](docs/93.md)
+ [4.4.4实施查询系统](docs/94.md)
+ [5使用注册机进行计算](docs/95.md)
+ [5.1设计套准机](docs/96.md)
+ [5.1.1描述注册机的语言](docs/97.md)
+ [5.1.2机械设计中的抽象](docs/98.md)
+ [5.1.3子例程](docs/99.md)
+ [5.1.4使用堆栈实现递归](docs/100.md)
+ [5.1.5指令摘要](docs/101.md)
+ [5.2寄存器机模拟器](docs/102.md)
+ [5.2.1机器型号](docs/103.md)
+ [5.2.2汇编器](docs/104.md)
+ [5.2.3生成指令的执行功能](docs/105.md)
+ [5.2.4监控机器性能](docs/106.md)
+ [5.3储存分配和垃圾回收](docs/107.md)
+ [5.3.1存储为向量](docs/108.md)
+ [5.3.2维护无限内存的错觉](docs/109.md)
+ [5.4显式控制评估者](docs/110.md)
+ [5.4.1显式控制评估器的核心](docs/111.md)
+ [5.4.2序列评估和尾递归](docs/112.md)
+ [5.4.3条件,赋值和定义](docs/113.md)
+ [5.4.4运行评估器](docs/114.md)
+ [5.5编译](docs/115.md)
+ [5.5.1编译器的结构](docs/116.md)
+ [5.5.2编译表达式](docs/117.md)
+ [5.5.3编译组合](docs/118.md)
+ [5.5.4组合指令序列](docs/119.md)
+ [5.5.5编译代码示例](docs/120.md)
+ [5.5.6词汇寻址](docs/121.md)
+ [5.5.7将编译后的代码与评估器接口](docs/122.md)
+ [参考文献](docs/126.md)
+ [JavaScript改编](docs/128.md)
+ [NUS CS1101S:SICP JavaScript 描述](README.md)
+ [前言](docs/sicp-js_00.md)
+ [《计算机程序的构造和解释》前言,1984 年](docs/sicp-js_01.md)
+ [序言](docs/sicp-js_02.md)
+ [《计算机程序的构造和解释》序言,1996 年和 1984 年](docs/sicp-js_03.md)
+ [致谢](docs/sicp-js_04.md)
+ [一、使用函数构建抽象](docs/sicp-js_05.md)
+ [二、使用数据构建抽象](docs/sicp-js_06.md)
+ [三、模块化、对象和状态](docs/sicp-js_07.md)
+ [四、元语言抽象](docs/sicp-js_08.md)
+ [五、使用寄存器机进行计算](docs/sicp-js_09.md)
+ [参考文献](docs/sicp-js_10.md)
\ No newline at end of file
# 前言
当我还是学生的时候,我有幸见到了令人惊叹的艾伦·珀利斯,并与他交谈过几次。他和我有一个共同之处,那就是对两种截然不同的编程语言:Lisp 和 APL 的热爱和尊敬。追随他的脚步是一项艰巨的任务,尽管他开辟了一条出色的道路。尽管如此,我还是想重新审视一下他在这本书的原前言中所做的一个评论(并且,我建议你在读完这本书之前,先读一下紧接着这本书的前言)。100 个函数操作一个数据结构真的比 10 个函数操作 10 个数据结构好吗?
为了仔细回答这个问题,我们首先需要问一个数据结构是否是“通用的”:它能方便地完成那 10 个更专门化的数据结构的角色吗?
就此而言,我们也可以问:我们真的需要 100 个函数吗?有没有一个单一的通用功能可以完成所有其他功能的角色?
对于最后一个问题,令人惊讶的答案是“是”;构造一个函数只需要一点点技巧,这个函数接受(1)一个作为其他函数描述的数据结构,和(2)一个参数列表,当应用于给定的参数时,它的行为和其他函数完全一样。设计一个能够描述任何计算的数据结构并不复杂。本书第 4 章中描述了一个这样的数据结构(表达式和语句的标记列表表示,与将名称与值相关联的环境配对)和一个这样的通用函数(`apply`)。所以也许我们只需要一个函数和一个数据结构。
理论上是这样的。在实践中,我们发现,当人类构造计算的描述时,画出有助于我们组织代码结构的区别是很方便的,这样我们可以更好地理解它们。我相信 Perlis 说的不是计算能力,而是人类的能力和人类的局限性。
人类思维似乎擅长的一件事是给事物命名;我们有强大的联想记忆。给定一个名字,我们可以很快回忆起一些相关的事情。这就是为什么我们通常发现使用 Lambda 演算比使用组合微积分更容易;对于大多数人来说,解释 Lisp 表达式`(lambda (x) (lambda (y) (+ x y)))`或 JavaScript 表达式要容易得多
`x => y => x + y`比组合式表达
```js
((S ((S (K S)) ((S ((S (K S)) ((S (K K)) (K +)))) ((S (K K)) I)))) (K I))
```
即使有直接的结构对应,也很容易用五行 Lisp 代码表达出来。
因此,虽然原则上我们可以只使用一个通用函数,但我们更喜欢模块化我们的代码,给各个部分命名,并提及函数描述的名称,而不是不断地将描述本身提供给通用函数。
在我 1998 年的演讲“发展一门语言”中,我评论说一个好的程序员“不仅仅是写程序。一个好的程序员会建立一个工作词汇。”当我们设计和定义程序中越来越多的部分时,我们给这些部分起了名字,结果是我们有了更丰富的语言来编写剩下的部分。
但是我们也发现在数据结构之间进行区分并给它们命名是很自然的。
嵌套列表可能是一种通用的数据结构(值得注意的是,许多现代的和广泛使用的数据结构,如 HTML、XML 和 JSON,也是带括号的嵌套表示,只是比 Lisp 的裸括号稍微复杂一些)。还有许多函数,比如查找列表的长度,或者对列表中的每个元素应用一个函数并返回一个结果列表,这些函数在很多情况下都很有用。然而,当我在思考一个具体的计算时,我经常对自己说,“这两个东西的列表,我希望是一个人的名字和姓氏,但这两个东西的列表,我希望是一个复数的实部和虚部,另一个两个东西的列表,我会认为是一个分数的分子和分母。”换句话说,我进行了区分——在数据结构中明确表示这些区分可能是有用的,部分是为了防止错误,例如意外地将一个复数当作一个分数。(还是那句话,这是关于人的能力和人的局限性的评论。)
自从这本书的第一版在大约 40 年前出版以来,更多的组织数据的方法已经变得相对标准,尤其是“面向对象”的方法,许多语言,包括 JavaScript,都支持专门的数据结构,比如对象、字符串、堆和映射,以及各种内置的机制和库。但是在这样做的时候,许多语言放弃了对更通用的概念的支持。例如,Java 最初不支持一级函数,直到最近才加入了这些函数,从而大大增强了它的表达能力。
同样,APL 最初不支持一级函数,而且它最初的单一数据结构——任意维数的数组——不如通用数据结构有用,因为数组不能包含其他数组作为元素。APL 的最新版本支持匿名函数值和嵌套数组,这使得 APL 更具表现力。(APL 的最初设计确实有两个非常好的方面:适用于一种数据结构的一组全面的函数,以及为这些函数精心选择的一组名称。我说的不是那些搞笑的符号和希腊字母,而是 APL 程序员提到它们时用的口语词,像`shape``reshape``compress``expand``laminate`这样的词;这些不是符号的名字,而是它们所代表的功能的名字。Ken Iverson 很擅长为数组中的函数选择简短、易记、生动的名字。)
虽然 JavaScript 和 Java 一样,最初设计时考虑了对象和方法,但它也从一开始就融入了一流的函数,使用它的对象来定义通用数据结构并不困难。因此,JavaScript 并不像你想象的那样远离 Lisp,正如本期的计算机程序的结构和解释所展示的,它是一个很好的展示关键思想的替代框架。SICP 从来都不是一门编程语言;它为程序组织提供了强大的、通用的思想,这在任何语言中都是有用的。
Lisp 和 JavaScript 有什么共同点?将计算(代码加上一些相关数据)抽象为函数供以后执行的能力;在数据结构中嵌入对这些函数的引用的能力;根据参数调用函数的能力;区分能力(有条件执行);一种方便的通用数据结构;对这些数据进行完全自动化的存储管理(考虑到其他因素,这似乎是显而易见的,直到您意识到许多广泛使用的编程语言都不具备这一点);一大组用于在通用数据结构上操作的有用函数;以及使用通用数据结构来表示更专用的数据结构的标准策略。
因此,也许真相就在珀尔斯如此雄辩地假设的两个极端之间。也许最佳点更像是 40 个足够通用的函数,可以对通用数据结构(如列表)进行有效的操作,但也有 10 组 6 个函数,当我们从通用数据结构的 10 个专用视图中选择一个时,每个函数都是相关的。如果我们给这些函数和专门化的视图起个好名字,这是可以管理的。
当你阅读这本书时,请不仅注意编程语言的结构和它们是如何使用的,还要注意函数、变量和数据结构的名字。它们并不都像艾弗森为他的 APL 函数选择的名字那样简短而生动,但它们是以一种深思熟虑和系统的方式选择的,以增强您对整个程序结构的理解。
原语、组合方式、功能抽象、命名,以及通过区分以特定方式使用通用数据结构的约定:这些是优秀编程语言的基本构件。接下来,想象力和基于经验的良好工程判断可以完成剩下的工作。
——小盖伊·L·斯蒂尔,马萨诸塞州列克星敦,2021 年
\ No newline at end of file
# 《计算机程序的结构和解释》前言,1984 年
教育家、将军、营养师、心理学家和家长计划。军队,学生,还有一些社团都是程序化的。解决大问题需要一系列的程序,其中大部分都是中途产生的。这些节目充斥着似乎是手头问题特有的问题。要欣赏编程本身就是一种智力活动,你必须求助于计算机编程;你必须阅读和编写计算机程序——其中许多程序。这些程序是关于什么的,或者它们服务于什么样的应用程序,都没有多大关系。重要的是它们的表现如何,以及在创建更好的程序时,它们与其他程序的配合有多顺畅。程序员必须寻求部分的完美和集合的充分。在本书中,“程序”的使用集中在用 Lisp 方言编写的程序的创建、执行和研究上,以便在数字计算机上执行。使用 Lisp,我们并没有限制我们可以编程的内容,只是限制了我们程序描述的符号。
我们对本书主题的理解涉及到三个现象焦点:人类思维、计算机程序集合和计算机。每一个计算机程序都是一个在头脑中孵化的模型,一个真实的或心理的过程。这些源于人类经验和思想的过程数量巨大,细节错综复杂,而且在任何时候都只能被部分理解。我们的计算机程序很少能模拟出令我们永远满意的模型。因此,即使我们的程序是精心手工制作的符号的离散集合,连锁功能的马赛克,它们也在不断进化:随着我们对模型的感知加深、扩大、概括,我们改变它们,直到模型最终在我们与之斗争的另一个模型中达到亚稳态。与计算机编程相关的兴奋的来源是在头脑中和在计算机上以程序表达的机制的持续展开和它们产生的感知的爆发。如果艺术解释了我们的梦,计算机就以程序的形式执行它们!
尽管计算机很强大,但它是一个苛刻的监工。它的程序必须是正确的,我们想说的话必须在每个细节上都准确无误。就像在每一个其他的象征性活动中一样,我们通过争论确信程序的真实性。Lisp 本身可以被赋予一个语义(顺便说一下,另一个模型),如果一个程序的功能可以被指定,比方说,在谓词演算中,逻辑的证明方法可以被用来进行一个可接受的正确性论证。不幸的是,随着程序变得越来越大和复杂,就像他们经常做的那样,规范本身的充分性、一致性和正确性变得值得怀疑,因此完整的正确性的形式论证很少伴随着大型程序。因为大程序是从小程序发展而来的,所以我们开发一个标准程序结构的武器库是至关重要的,我们已经确定了这些标准程序结构的正确性——我们称之为习惯用法——并学会使用有价值的组织技术将它们组合成更大的结构。这些技术将在本书中详细讨论,理解它们对于参与名为编程的创新事业是必不可少的。最重要的是,强大的组织技术的发现和掌握加速了我们创建大型重要项目的能力。相反,由于编写大型程序非常费力,我们被刺激去发明新的方法来减少大量的功能和细节以适应大型程序。
与程序不同,计算机必须遵守物理定律。如果它们希望快速运行——每个状态变化几纳秒——它们必须只将电子传输很短的距离(最多 1.5 英尺)。空间中如此集中的大量设备所产生的热量必须被移除。一门精致的工程艺术在功能多样性和设备密度之间取得了平衡。无论如何,硬件总是在比我们关心的编程水平更原始的水平上运行。将我们的 Lisp 程序转换成“机器”程序的过程本身就是我们编程的抽象模型。他们的研究和创造给了与编程任意模型相关的组织程序大量的洞察力。当然,计算机本身也可以这样建模。想想看:最小的物理开关元件的行为是通过微分方程描述的量子力学来模拟的,微分方程的详细行为是通过在计算机上执行的计算机程序中表示的数值近似来捕捉的,计算机程序由以下组成。。。!
分开确定这三个焦点不仅仅是战术上的方便。尽管,正如他们所说的,这都是头脑中的,这种逻辑上的分离导致了这些焦点之间符号交通的加速,这些焦点的丰富性、活力和潜力在人类经验中只有生命本身的进化才能超越。在最好的情况下,焦点之间的关系是亚稳态的。计算机总是不够大或不够快。硬件技术的每一次突破都导致更大规模的编程企业、新的组织原则和抽象模型的丰富。每个读者都应该定期问自己“向什么目标前进,向什么目标前进?”—但是不要问得太频繁,以免你因为苦乐参半的哲学的便秘而错过编程的乐趣。
在我们编写的程序中,有些(但永远不够)执行精确的数学功能,例如排序或寻找一个数字序列的最大值,确定素性,或寻找平方根。我们称这样的程序为算法,关于它们的最佳行为,特别是关于执行时间和数据存储需求这两个重要参数,我们已经知道了很多。程序员应该掌握好的算法和习惯用法。即使一些程序抵制精确的规范,程序员也有责任评估并总是试图改进它们的性能。
Lisp 是一个幸存者,已经使用了大约四分之一世纪。在活跃的编程语言中,只有 Fortran 有更长的寿命。这两种语言都支持重要应用领域的编程需求,Fortran 用于科学和工程计算,Lisp 用于人工智能。这两个领域仍然很重要,他们的程序员如此专注于这两种语言,以至于 Lisp 和 Fortran 很可能会继续活跃地使用至少四分之一世纪。
口齿不清的变化。本文中使用的 Scheme 方言是从最初的 Lisp 发展而来的,在几个重要方面与后者不同,包括变量绑定的静态范围和允许函数以值的形式产生函数。在语义结构上,Scheme 与 Algol 60 和早期的 Lisps 非常相似。Algol 60 永远不再是一种活跃的语言,它存在于 Scheme 和 Pascal 的基因中。除了这两种语言之外,很难找到另外两种语言是两种不同文化的沟通渠道。帕斯卡赞成建造金字塔——雄伟壮观、令人屏息的静态建筑,由军队将沉重的石块推到合适的位置。Lisp 是用来建造有机体的——壮观的、令人屏息的、动态的结构是由一组组将无数波动的简单有机体安装到位而建造的。这两种情况下使用的组织原则是相同的,除了一个非常重要的区别:委托给单个 Lisp 程序员的可自由导出的功能比 Pascal enterprises 中的功能多一个数量级。Lisp 程序用函数扩充了库,这些函数的效用超越了产生它们的应用程序。Lisp 的本地数据结构列表在很大程度上是这种效用增长的原因。列表的简单结构和自然适用性反映在非常不同步的函数中。在 Pascal 中,过多的可声明数据结构导致了函数内的专门化,这抑制并惩罚了偶然的合作。在一个数据结构上运行 100 个函数比在 10 个数据结构上运行 10 个函数要好。因此,金字塔必须保持一千年不变;有机体必须进化或灭亡。
为了说明这种差异,请将本书中对材料和练习的处理与任何使用 Pascal 的第一课教材中的处理进行比较。不要误以为这是一篇只有麻省理工学院才能理解的文章,是那里的学生所特有的。这正是一本关于 Lisp 编程的严肃书籍所必须具备的,不管学生是谁,也不管在哪里使用它。
请注意,这是一本关于编程的教科书,不像大多数 Lisp 书籍那样是为从事人工智能工作做准备。毕竟,随着被调查的系统变得越来越大,软件工程和人工智能的关键编程问题往往会结合在一起。这解释了为什么在人工智能之外,人们对 Lisp 越来越感兴趣。
正如人们对其目标的期望,人工智能研究产生了许多重要的编程问题。在其他编程文化中,这一系列问题催生了新的语言。事实上,在任何非常大的编程任务中,一个有用的组织原则是通过语言的发明来控制和隔离任务模块内的流量。当一个人接近我们人类互动最频繁的系统的边界时,这些语言往往会变得不那么原始。结果,这样的系统包含了重复多次的复杂的语言处理功能。Lisp 具有如此简单的语法和语义,以至于解析可以被视为一项基本任务。因此,解析技术在 Lisp 程序中几乎不起作用,语言处理器的构造也很少阻碍大型 Lisp 系统的发展和变化。最后,正是这种语法和语义的简单性给所有 Lisp 程序员带来了负担和自由。任何规模的 Lisp 程序,超过几行,都不可能不被自由选择的函数所饱和。发明和适合;有适合和改造!我们为那些把自己的想法写在括号里的 Lisp 程序员干杯。
—康涅狄格州纽黑文市艾伦·J·佩利
\ No newline at end of file
# 前言
《计算机程序的结构和解释》一书(SICP)通过建立一系列计算的心智模型向读者介绍了计算的核心思想。第 1–3 章涵盖了所有现代高级编程语言共有的编程概念。《SICP》最初的两个版本在他们的程序示例中使用了编程语言方案,其极简主义的、面向表达式的语法使这本书能够专注于潜在的思想,而不是所选语言的设计。第 4 和 5 章使用 Scheme 为 Scheme 制定语言处理器,加深读者对心智模型的理解,探索语言扩展和替代。
自 1984 年出版和 1996 年再版以来,《SICP》已被世界各地的大学和学院采用为教科书,包括新加坡国立大学(NUS),它于 1997 年在 SICP 推出了入门课程 CS1101S。在 20 世纪 90 年代中期,出现了 Python、JavaScript 和 Ruby 语言,它们与 Scheme 共享中心设计元素,但是它们采用了更复杂的、面向语句的语法,该语法使用熟悉的代数(中缀)符号。这些程序越来越受欢迎,这使得教师们对他们在 SICP 的课程进行了调整,通常是将示例程序翻译成他们选择的语言,添加针对该语言的材料,以及省略 4.4、4.11 和 5.13 节的材料。
##### 让 SICP 适应 JavaScript
将《SICP》第二版改编为 JavaScript (SICP JS)的工作始于 2008 年的新加坡国立大学,CS1101S 于 2012 年改用 JavaScript。语言标准 ECMAScript 2015 引入了 Lambda 表达式、尾部递归以及块范围的变量和常量,这使得改编变得非常接近原始版本。只有当我们觉得 JavaScript 和 Scheme 之间的差异迫使我们对 SICP 进行实质性的修改时,我们才会这样做。这本书只涵盖了 JavaScript 的一小部分,所以读者不应该用它来学习语言。例如,JavaScript 对象的概念——无论如何都被认为是其基本成分之一——甚至没有被提及!
通过添加镜像 Scheme 原语的库——包括对列表结构的支持——并相应地修改文本,很容易将第 1 章到第 3 章的程序翻译成 JavaScript。然而,切换到 JavaScript 迫使我们对第 4 章和第 5 章的解释器和编译器做了微妙的改变,以处理返回语句。Scheme 的面向表达式的语法没有返回语句,这是面向语句语言的一个显著特征。
通过使用 JavaScript,第 1–3 章向读者介绍了当今大多数主流语言的语法风格。然而,同样的语法风格导致了第 4 章的重大变化,因为程序作为数据结构的直接表示不再是理所当然的了。这为我们提供了一个机会,向读者介绍 4.1 节中程序解析的概念,它是编程语言处理器的一个重要组成部分。在第 4.4 节中,JavaScript 的严格语法结构使所提出的逻辑编程系统的实现变得复杂,并且暴露了 JavaScript 作为编程语言设计工具的局限性。
##### 使用 SICP JS 的资源
麻省理工学院出版社的 SICP JS 网页链接到这本书的用户支持。这提供了书中的所有程序和广泛的教师资源,包括大量额外的练习和关于选择一个典型的大学学期可以涵盖的 SICP JS 子集的建议。书中的 JavaScript 程序在任何符合 JavaScript 的 ECMAScript 2020 规范(ECMA 2020)的 JavaScript 解释器中以推荐的严格模式运行。麻省理工出版社的网页包括 JavaScript 包`sicp`,它提供了书中所有被认为是“原语”的 JavaScript 函数。
##### 给读者
我们真诚地希望,如果这本书是你第一次接触编程,你将利用你新获得的对计算机程序的结构和解释的理解来学习更多的编程语言,包括 Scheme 和完整的 JavaScript 语言。如果你在学习 SICP JS 之前已经学习了 JavaScript,你可能会对这种语言背后的基本概念有新的见解,并发现用这么少的资源可以获得这么多的东西。如果你带着对《SICP》原著的了解来到《SICP JS》,你可能会喜欢看到以新的形式呈现的熟悉的观点——并且可能会欣赏在线比较版,可以在该书的网页上找到,SICP JS 和 SICP 可以并排查看。
—马丁·亨茨和托拜厄斯·里格斯塔德
\ No newline at end of file
# 《计算机程序的结构与解释》序言,1996 年 & 1984 年
## 《SICP》1996 年第二版序言
> 有没有可能软件不像其他任何东西,它注定要被抛弃:它的全部意义在于总是把它看成一个肥皂泡?
>
> ——艾伦·J·佩利
自 1980 年以来,本书中的材料一直是麻省理工学院入门级计算机科学学科的基础。当第一版出版时,我们已经教了四年这种材料,直到第二版的出现,又过了十二年。我们感到高兴的是,我们的工作已被广泛采纳并纳入其他案文。我们已经看到我们的学生接受了这本书里的思想和程序,并把它们作为新的计算机系统和语言的核心。从字面上理解一句古老的犹太法典双关语,我们的学生已经成为我们的建设者。我们很幸运有这样有能力的学生和这样有成就的建设者。
在准备这个版本的过程中,我们结合了我们自己的教学经验以及麻省理工学院和其他地方的同事们的评论所提出的数百个澄清。我们已经重新设计了书中大多数主要的编程系统,包括通用算术系统、解释器、寄存器机器模拟器和编译器;我们重写了所有的程序示例,以确保任何符合 IEEE Scheme 标准(IEEE 1990)的 Scheme 实现都能够运行代码。
这个版本强调了几个新的主题。其中最重要的是在计算模型中处理时间的不同方法所扮演的中心角色:带状态的对象、并发编程、函数式编程、惰性求值和非确定性编程。我们包括了关于并发性和非确定性的新章节,并且我们试图在整本书中整合这个主题。
这本书的第一版严格遵循了我们麻省理工学院一学期的课程大纲。有了第二版中的所有新材料,不可能在一个学期内涵盖所有内容,所以教师必须进行挑选。在我们自己的教学中,我们有时会跳过关于逻辑编程的部分(4.4 节),我们让学生使用寄存器机器模拟器,但我们不涉及它的实现(5.2 节),我们只给出编译器的粗略概述(5.5 节)。即便如此,这仍然是一门紧张的课程。一些教师可能希望只讲述前三或四章,而将其他材料留给后续课程。
麻省理工学院出版社的万维网网站为这本书的用户提供支持。这包括书中的程序、示例编程作业、补充材料和 Lisp Scheme 方言的可下载实现。
—哈罗德·艾贝尔森和杰拉德·让伊·萨斯曼
## 《SICP》1984 年第一版序言
> 电脑就像小提琴。你可以想象一个新手先试留声机,再试小提琴。他说,后者听起来很可怕。这是我们从人文主义者和大多数计算机科学家那里听到的观点。他们说,对于特定的目的来说,计算机程序是好的,但是它们不灵活。小提琴和打字机都不是,除非你学会如何使用它们。
>
> ——马文·明斯基,“为什么编程是表达理解不佳、表述不严谨的想法的好媒介”
“计算机程序的结构和解释”是麻省理工学院计算机科学的入门课程。这是麻省理工学院所有电子工程或计算机科学专业学生的必修课,占“公共核心课程”的四分之一,其中还包括两个关于电路和线性系统的科目以及一个关于数字系统设计的科目。自 1978 年以来,我们一直参与这一学科的发展,自 1980 年秋季以来,我们每年向 600 至 700 名学生教授这一材料的现有形式。这些学生中的大部分以前很少或没有接受过正式的计算培训,尽管许多人玩过一点计算机,少数人有丰富的编程或硬件设计经验。
我们对这个计算机科学导论课程的设计反映了两个主要问题。首先,我们想确立这样一种观念,即计算机语言不仅仅是让计算机执行操作的一种方式,而是一种表达方法论思想的新颖的形式媒介。因此,程序必须是写给人们阅读的,并且只是附带地给机器执行的。第二,我们认为,这个层次的主题要解决的基本材料不是特定编程语言结构的语法,也不是有效计算特定函数的聪明算法,甚至也不是算法的数学分析和计算的基础,而是用于控制大型软件系统的智能复杂性的技术。
我们的目标是,完成这门课程的学生应该对风格元素和编程美学有很好的感觉。他们应该掌握控制大型系统复杂性的主要技术。他们应该能够阅读 50 页长的程序,如果它是以一种典型的风格写的话。他们应该知道什么不该读,什么不需要在任何时候理解。他们应该对修改程序感到安全,保留原作者的精神和风格。
这些技能绝不是计算机编程所独有的。我们教授和借鉴的技术在所有工程设计中都是通用的。我们通过构建适当隐藏细节的抽象来控制复杂性。我们通过建立常规接口来控制复杂性,这些接口使我们能够通过以“混合和匹配”的方式组合标准的、众所周知的部分来构建系统。我们通过建立描述设计的新语言来控制复杂性,每种语言都强调设计的特定方面,而不强调其他方面。
我们对待这个问题的基本态度是,我们坚信“计算机科学”不是一门科学,它的重要性与计算机没有什么关系。计算机革命是我们思考方式和表达方式的革命。这一变化的本质是出现了所谓的过程认识论——从命令的角度研究知识结构,这与经典数学学科采取的更具陈述性的观点相反。数学为精确处理“是什么”的概念提供了一个框架计算为精确处理“如何做”的概念提供了一个框架
在教授我们的材料时,我们使用编程语言 Lisp 的一种方言。我们从不正式教授这门语言,因为我们不需要。我们就是用,过几天学生就拿起来了。这是类 Lisp 语言的一个很大的优势:它们很少有形成复合表达式的方法,而且几乎没有句法结构。所有的形式属性都可以在一个小时内完成,比如国际象棋的规则。过了一会儿,我们就忘记了语言的语法细节(因为根本没有),开始处理真正的问题——弄清楚我们想要计算什么,我们如何将问题分解成可管理的部分,以及我们将如何处理这些部分。Lisp 的另一个优点是,它比我们所知的任何其他语言都支持(但不强制)更多的程序模块化分解的大规模策略。我们可以进行过程和数据抽象,我们可以使用高阶函数来捕捉常见的使用模式,我们可以使用赋值和数据突变来模拟本地状态,我们可以用流和延迟评估来链接程序的各个部分,我们还可以轻松地实现嵌入式语言。所有这些都嵌入到一个交互式环境中,对增量程序设计、构建、测试和调试提供了出色的支持。我们感谢从约翰·麦卡锡开始的所有一代 Lisp 奇才,他们创造了一个前所未有的强大而优雅的工具。
Scheme 是我们使用的 Lisp 方言,它试图将 Lisp 和 Algol 的强大和优雅结合在一起。从 Lisp 中,我们获得了源自简单语法的元语言能力,程序作为数据对象的统一表示,以及垃圾收集堆分配的数据。从 Algol 中,我们得到了词法范围和块结构,这是 Algol 委员会中编程语言设计先驱们的礼物。我们希望引用约翰·雷诺兹和彼得·兰丁对 Church 的 Lambda 演算与编程语言结构之间关系的见解。我们也认识到我们对数学家的亏欠,他们在计算机出现的几十年前就探索了这个领域。这些先驱包括阿隆佐·邱奇、巴克利·罗瑟、斯蒂芬·克莱尼和哈斯克尔·库里。
——哈罗德·艾贝尔森和杰拉德·让伊·萨斯曼
\ No newline at end of file
# 致谢
《计算机程序的结构和解释 (SICP JS)的 JavaScript 改编是在新加坡国立大学(NUS)为课程 CS1101S 开发的。该课程由 Low Kok Lim 共同教授了六年,他良好的教学判断对该课程和该项目的成功至关重要。CS1101S 教学团队包括许多新加坡国立大学的同事和 300 多名本科生助教。他们在过去九年里不断的反馈让我们解决了无数特定于 JavaScript 的问题,消除了不必要的复杂性,同时保留了 SICP 和 JavaScript 的基本特性。
SICP JS 是一个软件项目,也是一个图书项目。我们在 2008 年从原作者处获得了 LaTeX 图书来源。早期的 SICP JS 工具链是由刘航开发,冯飘飘完善的。陈·何岸开发子印刷版本的第一批工具,乔林·谭在此基础上开发子第一版电子书的工具,心悦和王千将这些工具重新用于当前的比较版。Samuel Fang 设计并开发了 SICP JS 的网络版。
SICP JS 和 CS1101S 的网络版很大程度上依赖于一个叫做源码学院的软件系统,它支持的 JavaScript 子语言叫做源码。在 SICP JS 的准备过程中,许多学生对源学院做出了贡献,系统将他们突出地列为“贡献者”自 2020 年以来,新加坡国立大学课程 CS4215“编程语言实现”的学生贡献了几个在 SICP JS 中使用的编程语言实现:3.4 节中使用的源代码的并发版本由郑群·库和乔纳森·陈开发;第 4.2 节中使用的惰性实现是由杰卢利·艾哈迈德、伊恩·肯德尔·邓肯、克鲁兹·乔马里·埃万格利斯塔和奥尔登·谭开发的;第 4.3 节中使用的不确定性实现是由阿尔萨兰·吉玛和阿努巴夫开发的;Daryl Tan 帮助将这些实现整合到学院中。
我们非常感谢瑞典研究和高等教育国际合作基金会 STINT,它的休假计划将马丁和托拜厄斯联系在一起,并允许托拜厄斯作为 CS1101S 的合作教师并加入 SICP JS 项目。
我们要感谢 Allen Wirfs-Brock 领导的 ECMAScript 2015 委员会的勇敢工作。SICP JS 严重依赖常量和`let`声明以及 Lambda 表达式,所有这些都是通过 ECMAScript 2015 添加到 JavaScript 中的。这些增加的内容让我们在介绍 SICP 最重要的思想时贴近原著。领导第一个 ECMAScript 标准化的 Guy Lewis Steele Jr .对第 4 章的一些练习提供了详细而有用的反馈。
—马丁·亨茨和托拜厄斯·里格斯塔德
## 《SICP》1996 年第二版致谢
我们要感谢帮助我们开发这本书和这一课程的许多人。
我们的主题显然是“6.231”的智力后代,这是一门关于编程语言学和 Lambda 演算的精彩课程,由 Jack Wozencraft 和 Arthur Evans Jr. 于 20 世纪 60 年代在麻省理工学院教授。
我们非常感谢罗伯特·法诺,他重组了麻省理工学院的电子工程和计算机科学导论课程,以强调工程设计的原则。他带领我们开始了这项事业,并写了第一套主题笔记,这本书就是从这些笔记演变而来的。
我们试图教授的许多编程风格和美学都是与 Guy Lewis Steele Jr .共同开发的,他与杰拉德·让伊·萨斯曼合作开发了 Scheme 语言。此外,David Turner、Peter Henderson、Dan Friedman、David Wise 和 Will Clinger 教授了我们本书中出现的函数式编程社区的许多技术。
乔尔·摩西教我们如何构建大型系统。他在 Macsyma 系统上进行符号计算的经验提供了一种洞察力,即人们应该避免复杂的控制,集中精力组织数据,以反映被建模世界的真实结构。
马文·明斯基和西蒙·派珀特形成了我们对编程及其在我们知识生活中的地位的许多态度。多亏了他们,我们懂得了计算为探索思想提供了一种表达方式,否则这些思想会过于复杂而无法精确处理。他们强调,学生编写和修改程序的能力提供了一个强大的媒介,在这个媒介中,探索成为一种自然的活动。
我们也非常同意 Alan Perlis 的观点,即编程充满了乐趣,我们最好小心地支持编程的乐趣。这种快乐的一部分来源于观察大师们的工作。我们有幸成为比尔·戈斯帕和理查德·格林布拉特的学徒程序员。
很难确定所有为我们的课程发展做出贡献的人。我们感谢所有在过去 15 年里与我们一起工作并为我们的课题投入了许多额外时间的讲师、背诵指导老师和导师,特别是比尔·西伯特、艾伯特·迈耶、乔·斯托伊、兰迪·戴维斯、路易斯·布莱达、埃里克·格里姆森、罗德·布鲁克斯、林恩·斯坦和彼得·索洛维茨。我们要特别感谢现就职于韦尔斯利学院的富兰克林·图尔巴克的杰出教学贡献;他在本科教学方面的工作树立了一个我们都渴望达到的标准。我们感谢 Jerry Saltzer 和 Jim Miller 帮助我们理解并发性的奥秘,也感谢 Peter Szolovits 和 David McAllester 在第 4 章中对非确定性评估的阐述。
许多人付出了巨大的努力在其他大学展示这些材料。我们与之密切合作的一些人有 Technion 的雅各布·卡泽内尔森、加州大学欧文分校的哈迪·迈尔、牛津大学的乔·斯托伊、普渡大学的伊莉莎·萨克斯和挪威科技大学的简·科莫洛夫斯基。我们为我们的同事感到非常自豪,他们在其他大学改编了这一主题,获得了重要的教学奖,包括耶鲁大学的 Kenneth Yip、加州大学伯克利分校的 Brian Harvey 和康奈尔大学的 Dan Huttenlocher。
Al Moyé安排我们将这些材料教授给惠普公司的工程师,并制作了这些讲座的录像带。我们要感谢才华横溢的讲师,特别是 Jim Miller、Bill Siebert 和 Mike Eisenberg,他们设计了包含这些磁带的继续教育课程,并在世界各地的大学和行业中教授这些课程。
其他国家的许多教育家为翻译第一版投入了大量的工作。Michel Briand、Pierre Chamard 和 André Pic 制作了法文版;苏珊·丹尼尔斯·赫罗尔德出版了德文版;元吉文雄制作了日文版。我们不知道谁制作了中文版,但我们认为被选为“未经授权”翻译的主题是一种荣誉。
很难列举所有对我们用于教学目的的计划系统的开发做出技术贡献的人。除了盖伊·斯蒂尔,主要的奇才还包括克里斯·汉森、乔·鲍比尔、吉姆·米勒、吉列尔莫·罗扎斯和斯蒂芬·亚当斯。投入大量时间的其他人有理查德·斯托尔曼、艾伦·鲍登、肯特·皮特曼、乔恩·塔夫特、尼尔·梅尔、约翰·兰平、葛温·奥斯诺斯、特雷西·拉腊比、乔治·卡雷特、索玛·乔杜里、比尔·奇恰罗、史蒂文·基尔希、利·克洛茨、韦恩·诺斯、托德·卡斯、帕特里克·安东内尔、凯文·西奥博尔德、丹尼尔·魏斯、肯尼斯·辛克莱、安东尼·考特曼什、亨利·吴、安德鲁·柏林和露丝·休。
除了 MIT 的实现,我们还要感谢许多为 IEEE Scheme 标准工作的人,包括编辑 R ⁴ RS 的 William Clinger 和 Jonathan Rees,以及编写 IEEE 标准的 Chris Haynes、David Bartley、Chris Hanson 和 Jim Miller。
丹·弗里德曼(Dan Friedman)是该计划社区的长期领导者。该社区更广泛的工作超越了语言设计问题,包括重大的教育创新,如基于 Schemer's Inc .的 EdScheme 的高中课程,以及 Mike Eisenberg、Brian Harvey 和 Matthew Wright 的精彩书籍。
我们感谢那些为使这本书成为一本真正的书做出贡献的人,特别是特里·艾林、拉里·科恩和麻省理工学院出版社的保罗·贝奇。艾拉·马泽尔找到了精彩的封面图片。对于第二版,我们特别感谢伯纳德和艾拉·马泽尔对书籍设计的帮助,以及非凡的巫师大卫·琼斯 TeX。我们也非常感谢那些对新草稿发表深刻评论的读者:雅各布·卡泽尼尔森、哈迪·梅尔、吉姆·米勒,特别是布莱恩·哈维,他对这本书的贡献就像朱莉对他的书《简单计划》的贡献一样。
最后,我们要感谢多年来鼓励这项工作的各组织的支持,包括由 Ira Goldstein 和 Joel Birnbaum 促成的惠普公司的支持,以及由鲍勃·卡恩促成的 DARPA 的支持。
—哈罗德·艾贝尔森和杰拉德·让伊·萨斯曼
计算机程序的结构和解释
JavaScript 版本
\ No newline at end of file
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
docs/img/9780262543231_FC.jpg

457.0 KB | W: | H:

docs/img/9780262543231_FC.jpg

47.7 KB | W: | H:

docs/img/9780262543231_FC.jpg
docs/img/9780262543231_FC.jpg
docs/img/9780262543231_FC.jpg
docs/img/9780262543231_FC.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c1-fig-0001.jpg

27.6 KB | W: | H:

docs/img/c1-fig-0001.jpg

2.8 KB | W: | H:

docs/img/c1-fig-0001.jpg
docs/img/c1-fig-0001.jpg
docs/img/c1-fig-0001.jpg
docs/img/c1-fig-0001.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c1-fig-0002.jpg

28.9 KB | W: | H:

docs/img/c1-fig-0002.jpg

2.7 KB | W: | H:

docs/img/c1-fig-0002.jpg
docs/img/c1-fig-0002.jpg
docs/img/c1-fig-0002.jpg
docs/img/c1-fig-0002.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c1-fig-0003.jpg

73.3 KB | W: | H:

docs/img/c1-fig-0003.jpg

8.0 KB | W: | H:

docs/img/c1-fig-0003.jpg
docs/img/c1-fig-0003.jpg
docs/img/c1-fig-0003.jpg
docs/img/c1-fig-0003.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c1-fig-0004.jpg

45.4 KB | W: | H:

docs/img/c1-fig-0004.jpg

3.7 KB | W: | H:

docs/img/c1-fig-0004.jpg
docs/img/c1-fig-0004.jpg
docs/img/c1-fig-0004.jpg
docs/img/c1-fig-0004.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c1-fig-0005.jpg

106.4 KB | W: | H:

docs/img/c1-fig-0005.jpg

12.9 KB | W: | H:

docs/img/c1-fig-0005.jpg
docs/img/c1-fig-0005.jpg
docs/img/c1-fig-0005.jpg
docs/img/c1-fig-0005.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c1-fig-5001.jpg

29.8 KB | W: | H:

docs/img/c1-fig-5001.jpg

2.7 KB | W: | H:

docs/img/c1-fig-5001.jpg
docs/img/c1-fig-5001.jpg
docs/img/c1-fig-5001.jpg
docs/img/c1-fig-5001.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c1-fig-5002.jpg

16.4 KB | W: | H:

docs/img/c1-fig-5002.jpg

1.0 KB | W: | H:

docs/img/c1-fig-5002.jpg
docs/img/c1-fig-5002.jpg
docs/img/c1-fig-5002.jpg
docs/img/c1-fig-5002.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c1-fig-5003.jpg

18.8 KB | W: | H:

docs/img/c1-fig-5003.jpg

1.3 KB | W: | H:

docs/img/c1-fig-5003.jpg
docs/img/c1-fig-5003.jpg
docs/img/c1-fig-5003.jpg
docs/img/c1-fig-5003.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c1-fig-5004.jpg

18.2 KB | W: | H:

docs/img/c1-fig-5004.jpg

1.3 KB | W: | H:

docs/img/c1-fig-5004.jpg
docs/img/c1-fig-5004.jpg
docs/img/c1-fig-5004.jpg
docs/img/c1-fig-5004.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c1-fig-5005.jpg

10.9 KB | W: | H:

docs/img/c1-fig-5005.jpg

256 字节 | W: | H:

docs/img/c1-fig-5005.jpg
docs/img/c1-fig-5005.jpg
docs/img/c1-fig-5005.jpg
docs/img/c1-fig-5005.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c1-fig-5006.jpg

48.9 KB | W: | H:

docs/img/c1-fig-5006.jpg

5.3 KB | W: | H:

docs/img/c1-fig-5006.jpg
docs/img/c1-fig-5006.jpg
docs/img/c1-fig-5006.jpg
docs/img/c1-fig-5006.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c1-fig-5007.jpg

12.3 KB | W: | H:

docs/img/c1-fig-5007.jpg

501 字节 | W: | H:

docs/img/c1-fig-5007.jpg
docs/img/c1-fig-5007.jpg
docs/img/c1-fig-5007.jpg
docs/img/c1-fig-5007.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c1-fig-5008.jpg

24.6 KB | W: | H:

docs/img/c1-fig-5008.jpg

2.1 KB | W: | H:

docs/img/c1-fig-5008.jpg
docs/img/c1-fig-5008.jpg
docs/img/c1-fig-5008.jpg
docs/img/c1-fig-5008.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c1-fig-5009.jpg

10.9 KB | W: | H:

docs/img/c1-fig-5009.jpg

269 字节 | W: | H:

docs/img/c1-fig-5009.jpg
docs/img/c1-fig-5009.jpg
docs/img/c1-fig-5009.jpg
docs/img/c1-fig-5009.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c1-fig-5010.jpg

17.1 KB | W: | H:

docs/img/c1-fig-5010.jpg

1.4 KB | W: | H:

docs/img/c1-fig-5010.jpg
docs/img/c1-fig-5010.jpg
docs/img/c1-fig-5010.jpg
docs/img/c1-fig-5010.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c1-fig-5011.jpg

15.2 KB | W: | H:

docs/img/c1-fig-5011.jpg

891 字节 | W: | H:

docs/img/c1-fig-5011.jpg
docs/img/c1-fig-5011.jpg
docs/img/c1-fig-5011.jpg
docs/img/c1-fig-5011.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c1-fig-5012.jpg

10.9 KB | W: | H:

docs/img/c1-fig-5012.jpg

275 字节 | W: | H:

docs/img/c1-fig-5012.jpg
docs/img/c1-fig-5012.jpg
docs/img/c1-fig-5012.jpg
docs/img/c1-fig-5012.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c1-fig-5013.jpg

11.0 KB | W: | H:

docs/img/c1-fig-5013.jpg

291 字节 | W: | H:

docs/img/c1-fig-5013.jpg
docs/img/c1-fig-5013.jpg
docs/img/c1-fig-5013.jpg
docs/img/c1-fig-5013.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c1-fig-5014.jpg

15.3 KB | W: | H:

docs/img/c1-fig-5014.jpg

702 字节 | W: | H:

docs/img/c1-fig-5014.jpg
docs/img/c1-fig-5014.jpg
docs/img/c1-fig-5014.jpg
docs/img/c1-fig-5014.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c1-fig-5015.jpg

13.0 KB | W: | H:

docs/img/c1-fig-5015.jpg

557 字节 | W: | H:

docs/img/c1-fig-5015.jpg
docs/img/c1-fig-5015.jpg
docs/img/c1-fig-5015.jpg
docs/img/c1-fig-5015.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c1-fig-5016.jpg

16.7 KB | W: | H:

docs/img/c1-fig-5016.jpg

1.1 KB | W: | H:

docs/img/c1-fig-5016.jpg
docs/img/c1-fig-5016.jpg
docs/img/c1-fig-5016.jpg
docs/img/c1-fig-5016.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c1-fig-5017.jpg

28.7 KB | W: | H:

docs/img/c1-fig-5017.jpg

2.8 KB | W: | H:

docs/img/c1-fig-5017.jpg
docs/img/c1-fig-5017.jpg
docs/img/c1-fig-5017.jpg
docs/img/c1-fig-5017.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c1-fig-5018.jpg

20.7 KB | W: | H:

docs/img/c1-fig-5018.jpg

1.3 KB | W: | H:

docs/img/c1-fig-5018.jpg
docs/img/c1-fig-5018.jpg
docs/img/c1-fig-5018.jpg
docs/img/c1-fig-5018.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c1-fig-5019.jpg

17.3 KB | W: | H:

docs/img/c1-fig-5019.jpg

1.1 KB | W: | H:

docs/img/c1-fig-5019.jpg
docs/img/c1-fig-5019.jpg
docs/img/c1-fig-5019.jpg
docs/img/c1-fig-5019.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c1-fig-5020.jpg

28.8 KB | W: | H:

docs/img/c1-fig-5020.jpg

2.5 KB | W: | H:

docs/img/c1-fig-5020.jpg
docs/img/c1-fig-5020.jpg
docs/img/c1-fig-5020.jpg
docs/img/c1-fig-5020.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c1-fig-5021.jpg

10.5 KB | W: | H:

docs/img/c1-fig-5021.jpg

188 字节 | W: | H:

docs/img/c1-fig-5021.jpg
docs/img/c1-fig-5021.jpg
docs/img/c1-fig-5021.jpg
docs/img/c1-fig-5021.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c1-fig-5022.jpg

10.5 KB | W: | H:

docs/img/c1-fig-5022.jpg

154 字节 | W: | H:

docs/img/c1-fig-5022.jpg
docs/img/c1-fig-5022.jpg
docs/img/c1-fig-5022.jpg
docs/img/c1-fig-5022.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c1-fig-5023.jpg

18.0 KB | W: | H:

docs/img/c1-fig-5023.jpg

1.1 KB | W: | H:

docs/img/c1-fig-5023.jpg
docs/img/c1-fig-5023.jpg
docs/img/c1-fig-5023.jpg
docs/img/c1-fig-5023.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c1-fig-5024.jpg

15.5 KB | W: | H:

docs/img/c1-fig-5024.jpg

863 字节 | W: | H:

docs/img/c1-fig-5024.jpg
docs/img/c1-fig-5024.jpg
docs/img/c1-fig-5024.jpg
docs/img/c1-fig-5024.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c1-fig-5025.jpg

17.6 KB | W: | H:

docs/img/c1-fig-5025.jpg

895 字节 | W: | H:

docs/img/c1-fig-5025.jpg
docs/img/c1-fig-5025.jpg
docs/img/c1-fig-5025.jpg
docs/img/c1-fig-5025.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c1-fig-5026.jpg

15.1 KB | W: | H:

docs/img/c1-fig-5026.jpg

936 字节 | W: | H:

docs/img/c1-fig-5026.jpg
docs/img/c1-fig-5026.jpg
docs/img/c1-fig-5026.jpg
docs/img/c1-fig-5026.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c1-fig-5027.jpg

16.4 KB | W: | H:

docs/img/c1-fig-5027.jpg

1.1 KB | W: | H:

docs/img/c1-fig-5027.jpg
docs/img/c1-fig-5027.jpg
docs/img/c1-fig-5027.jpg
docs/img/c1-fig-5027.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c2-fig-0001.jpg

76.3 KB | W: | H:

docs/img/c2-fig-0001.jpg

9.0 KB | W: | H:

docs/img/c2-fig-0001.jpg
docs/img/c2-fig-0001.jpg
docs/img/c2-fig-0001.jpg
docs/img/c2-fig-0001.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c2-fig-0002.jpg

12.8 KB | W: | H:

docs/img/c2-fig-0002.jpg

412 字节 | W: | H:

docs/img/c2-fig-0002.jpg
docs/img/c2-fig-0002.jpg
docs/img/c2-fig-0002.jpg
docs/img/c2-fig-0002.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c2-fig-0003.jpg

45.1 KB | W: | H:

docs/img/c2-fig-0003.jpg

4.0 KB | W: | H:

docs/img/c2-fig-0003.jpg
docs/img/c2-fig-0003.jpg
docs/img/c2-fig-0003.jpg
docs/img/c2-fig-0003.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c2-fig-0004.jpg

20.9 KB | W: | H:

docs/img/c2-fig-0004.jpg

1.3 KB | W: | H:

docs/img/c2-fig-0004.jpg
docs/img/c2-fig-0004.jpg
docs/img/c2-fig-0004.jpg
docs/img/c2-fig-0004.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c2-fig-0005.jpg

43.4 KB | W: | H:

docs/img/c2-fig-0005.jpg

3.5 KB | W: | H:

docs/img/c2-fig-0005.jpg
docs/img/c2-fig-0005.jpg
docs/img/c2-fig-0005.jpg
docs/img/c2-fig-0005.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c2-fig-0006.jpg

26.7 KB | W: | H:

docs/img/c2-fig-0006.jpg

2.3 KB | W: | H:

docs/img/c2-fig-0006.jpg
docs/img/c2-fig-0006.jpg
docs/img/c2-fig-0006.jpg
docs/img/c2-fig-0006.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c2-fig-0007.jpg

59.7 KB | W: | H:

docs/img/c2-fig-0007.jpg

9.6 KB | W: | H:

docs/img/c2-fig-0007.jpg
docs/img/c2-fig-0007.jpg
docs/img/c2-fig-0007.jpg
docs/img/c2-fig-0007.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c2-fig-0008.jpg

45.7 KB | W: | H:

docs/img/c2-fig-0008.jpg

4.5 KB | W: | H:

docs/img/c2-fig-0008.jpg
docs/img/c2-fig-0008.jpg
docs/img/c2-fig-0008.jpg
docs/img/c2-fig-0008.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c2-fig-0009.jpg

166.1 KB | W: | H:

docs/img/c2-fig-0009.jpg

37.2 KB | W: | H:

docs/img/c2-fig-0009.jpg
docs/img/c2-fig-0009.jpg
docs/img/c2-fig-0009.jpg
docs/img/c2-fig-0009.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c2-fig-0010.jpg

96.0 KB | W: | H:

docs/img/c2-fig-0010.jpg

12.5 KB | W: | H:

docs/img/c2-fig-0010.jpg
docs/img/c2-fig-0010.jpg
docs/img/c2-fig-0010.jpg
docs/img/c2-fig-0010.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c2-fig-0011.jpg

120.8 KB | W: | H:

docs/img/c2-fig-0011.jpg

34.6 KB | W: | H:

docs/img/c2-fig-0011.jpg
docs/img/c2-fig-0011.jpg
docs/img/c2-fig-0011.jpg
docs/img/c2-fig-0011.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c2-fig-0012.jpg

83.5 KB | W: | H:

docs/img/c2-fig-0012.jpg

11.7 KB | W: | H:

docs/img/c2-fig-0012.jpg
docs/img/c2-fig-0012.jpg
docs/img/c2-fig-0012.jpg
docs/img/c2-fig-0012.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c2-fig-0013.jpg

69.8 KB | W: | H:

docs/img/c2-fig-0013.jpg

5.6 KB | W: | H:

docs/img/c2-fig-0013.jpg
docs/img/c2-fig-0013.jpg
docs/img/c2-fig-0013.jpg
docs/img/c2-fig-0013.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c2-fig-0014.jpg

230.1 KB | W: | H:

docs/img/c2-fig-0014.jpg

56.3 KB | W: | H:

docs/img/c2-fig-0014.jpg
docs/img/c2-fig-0014.jpg
docs/img/c2-fig-0014.jpg
docs/img/c2-fig-0014.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c2-fig-0015.jpg

51.8 KB | W: | H:

docs/img/c2-fig-0015.jpg

5.1 KB | W: | H:

docs/img/c2-fig-0015.jpg
docs/img/c2-fig-0015.jpg
docs/img/c2-fig-0015.jpg
docs/img/c2-fig-0015.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c2-fig-0016.jpg

31.0 KB | W: | H:

docs/img/c2-fig-0016.jpg

2.3 KB | W: | H:

docs/img/c2-fig-0016.jpg
docs/img/c2-fig-0016.jpg
docs/img/c2-fig-0016.jpg
docs/img/c2-fig-0016.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c2-fig-0017.jpg

20.8 KB | W: | H:

docs/img/c2-fig-0017.jpg

1.6 KB | W: | H:

docs/img/c2-fig-0017.jpg
docs/img/c2-fig-0017.jpg
docs/img/c2-fig-0017.jpg
docs/img/c2-fig-0017.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c2-fig-0018.jpg

71.0 KB | W: | H:

docs/img/c2-fig-0018.jpg

6.6 KB | W: | H:

docs/img/c2-fig-0018.jpg
docs/img/c2-fig-0018.jpg
docs/img/c2-fig-0018.jpg
docs/img/c2-fig-0018.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c2-fig-0019.jpg

68.0 KB | W: | H:

docs/img/c2-fig-0019.jpg

9.1 KB | W: | H:

docs/img/c2-fig-0019.jpg
docs/img/c2-fig-0019.jpg
docs/img/c2-fig-0019.jpg
docs/img/c2-fig-0019.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c2-fig-0020.jpg

40.8 KB | W: | H:

docs/img/c2-fig-0020.jpg

3.1 KB | W: | H:

docs/img/c2-fig-0020.jpg
docs/img/c2-fig-0020.jpg
docs/img/c2-fig-0020.jpg
docs/img/c2-fig-0020.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c2-fig-0021.jpg

85.0 KB | W: | H:

docs/img/c2-fig-0021.jpg

9.7 KB | W: | H:

docs/img/c2-fig-0021.jpg
docs/img/c2-fig-0021.jpg
docs/img/c2-fig-0021.jpg
docs/img/c2-fig-0021.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c2-fig-0022.jpg

67.8 KB | W: | H:

docs/img/c2-fig-0022.jpg

6.9 KB | W: | H:

docs/img/c2-fig-0022.jpg
docs/img/c2-fig-0022.jpg
docs/img/c2-fig-0022.jpg
docs/img/c2-fig-0022.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c2-fig-0023.jpg

104.1 KB | W: | H:

docs/img/c2-fig-0023.jpg

11.4 KB | W: | H:

docs/img/c2-fig-0023.jpg
docs/img/c2-fig-0023.jpg
docs/img/c2-fig-0023.jpg
docs/img/c2-fig-0023.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c2-fig-0024.jpg

22.6 KB | W: | H:

docs/img/c2-fig-0024.jpg

1.8 KB | W: | H:

docs/img/c2-fig-0024.jpg
docs/img/c2-fig-0024.jpg
docs/img/c2-fig-0024.jpg
docs/img/c2-fig-0024.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c2-fig-0025.jpg

18.4 KB | W: | H:

docs/img/c2-fig-0025.jpg

1.3 KB | W: | H:

docs/img/c2-fig-0025.jpg
docs/img/c2-fig-0025.jpg
docs/img/c2-fig-0025.jpg
docs/img/c2-fig-0025.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c2-fig-0026.jpg

85.5 KB | W: | H:

docs/img/c2-fig-0026.jpg

8.8 KB | W: | H:

docs/img/c2-fig-0026.jpg
docs/img/c2-fig-0026.jpg
docs/img/c2-fig-0026.jpg
docs/img/c2-fig-0026.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c2-fig-5001.jpg

48.4 KB | W: | H:

docs/img/c2-fig-5001.jpg

5.4 KB | W: | H:

docs/img/c2-fig-5001.jpg
docs/img/c2-fig-5001.jpg
docs/img/c2-fig-5001.jpg
docs/img/c2-fig-5001.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c2-fig-5002.jpg

15.7 KB | W: | H:

docs/img/c2-fig-5002.jpg

967 字节 | W: | H:

docs/img/c2-fig-5002.jpg
docs/img/c2-fig-5002.jpg
docs/img/c2-fig-5002.jpg
docs/img/c2-fig-5002.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c2-fig-5003.jpg

14.1 KB | W: | H:

docs/img/c2-fig-5003.jpg

736 字节 | W: | H:

docs/img/c2-fig-5003.jpg
docs/img/c2-fig-5003.jpg
docs/img/c2-fig-5003.jpg
docs/img/c2-fig-5003.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c2-fig-5004.jpg

13.1 KB | W: | H:

docs/img/c2-fig-5004.jpg

626 字节 | W: | H:

docs/img/c2-fig-5004.jpg
docs/img/c2-fig-5004.jpg
docs/img/c2-fig-5004.jpg
docs/img/c2-fig-5004.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c2-fig-5005.jpg

13.0 KB | W: | H:

docs/img/c2-fig-5005.jpg

569 字节 | W: | H:

docs/img/c2-fig-5005.jpg
docs/img/c2-fig-5005.jpg
docs/img/c2-fig-5005.jpg
docs/img/c2-fig-5005.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c2-fig-5006.jpg

16.0 KB | W: | H:

docs/img/c2-fig-5006.jpg

917 字节 | W: | H:

docs/img/c2-fig-5006.jpg
docs/img/c2-fig-5006.jpg
docs/img/c2-fig-5006.jpg
docs/img/c2-fig-5006.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c2-fig-5007.jpg

54.4 KB | W: | H:

docs/img/c2-fig-5007.jpg

6.9 KB | W: | H:

docs/img/c2-fig-5007.jpg
docs/img/c2-fig-5007.jpg
docs/img/c2-fig-5007.jpg
docs/img/c2-fig-5007.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c2-fig-5008.jpg

44.6 KB | W: | H:

docs/img/c2-fig-5008.jpg

4.8 KB | W: | H:

docs/img/c2-fig-5008.jpg
docs/img/c2-fig-5008.jpg
docs/img/c2-fig-5008.jpg
docs/img/c2-fig-5008.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c2-fig-5009.jpg

14.8 KB | W: | H:

docs/img/c2-fig-5009.jpg

837 字节 | W: | H:

docs/img/c2-fig-5009.jpg
docs/img/c2-fig-5009.jpg
docs/img/c2-fig-5009.jpg
docs/img/c2-fig-5009.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c2-fig-5010.jpg

16.2 KB | W: | H:

docs/img/c2-fig-5010.jpg

1.1 KB | W: | H:

docs/img/c2-fig-5010.jpg
docs/img/c2-fig-5010.jpg
docs/img/c2-fig-5010.jpg
docs/img/c2-fig-5010.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c2-fig-5011.jpg

12.1 KB | W: | H:

docs/img/c2-fig-5011.jpg

467 字节 | W: | H:

docs/img/c2-fig-5011.jpg
docs/img/c2-fig-5011.jpg
docs/img/c2-fig-5011.jpg
docs/img/c2-fig-5011.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c2-fig-5012.jpg

18.3 KB | W: | H:

docs/img/c2-fig-5012.jpg

1.4 KB | W: | H:

docs/img/c2-fig-5012.jpg
docs/img/c2-fig-5012.jpg
docs/img/c2-fig-5012.jpg
docs/img/c2-fig-5012.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c2-fig-5013.jpg

11.9 KB | W: | H:

docs/img/c2-fig-5013.jpg

378 字节 | W: | H:

docs/img/c2-fig-5013.jpg
docs/img/c2-fig-5013.jpg
docs/img/c2-fig-5013.jpg
docs/img/c2-fig-5013.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c2-fig-5014.jpg

12.0 KB | W: | H:

docs/img/c2-fig-5014.jpg

393 字节 | W: | H:

docs/img/c2-fig-5014.jpg
docs/img/c2-fig-5014.jpg
docs/img/c2-fig-5014.jpg
docs/img/c2-fig-5014.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c2-fig-5015.jpg

20.1 KB | W: | H:

docs/img/c2-fig-5015.jpg

1.5 KB | W: | H:

docs/img/c2-fig-5015.jpg
docs/img/c2-fig-5015.jpg
docs/img/c2-fig-5015.jpg
docs/img/c2-fig-5015.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c3-fig-0001.jpg

30.3 KB | W: | H:

docs/img/c3-fig-0001.jpg

2.7 KB | W: | H:

docs/img/c3-fig-0001.jpg
docs/img/c3-fig-0001.jpg
docs/img/c3-fig-0001.jpg
docs/img/c3-fig-0001.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c3-fig-0002.jpg

64.9 KB | W: | H:

docs/img/c3-fig-0002.jpg

7.7 KB | W: | H:

docs/img/c3-fig-0002.jpg
docs/img/c3-fig-0002.jpg
docs/img/c3-fig-0002.jpg
docs/img/c3-fig-0002.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c3-fig-0003.jpg

54.4 KB | W: | H:

docs/img/c3-fig-0003.jpg

5.9 KB | W: | H:

docs/img/c3-fig-0003.jpg
docs/img/c3-fig-0003.jpg
docs/img/c3-fig-0003.jpg
docs/img/c3-fig-0003.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c3-fig-0004.jpg

88.9 KB | W: | H:

docs/img/c3-fig-0004.jpg

9.6 KB | W: | H:

docs/img/c3-fig-0004.jpg
docs/img/c3-fig-0004.jpg
docs/img/c3-fig-0004.jpg
docs/img/c3-fig-0004.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c3-fig-0005.jpg

60.5 KB | W: | H:

docs/img/c3-fig-0005.jpg

6.3 KB | W: | H:

docs/img/c3-fig-0005.jpg
docs/img/c3-fig-0005.jpg
docs/img/c3-fig-0005.jpg
docs/img/c3-fig-0005.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c3-fig-0006.jpg

71.9 KB | W: | H:

docs/img/c3-fig-0006.jpg

7.8 KB | W: | H:

docs/img/c3-fig-0006.jpg
docs/img/c3-fig-0006.jpg
docs/img/c3-fig-0006.jpg
docs/img/c3-fig-0006.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c3-fig-0007.jpg

93.4 KB | W: | H:

docs/img/c3-fig-0007.jpg

10.3 KB | W: | H:

docs/img/c3-fig-0007.jpg
docs/img/c3-fig-0007.jpg
docs/img/c3-fig-0007.jpg
docs/img/c3-fig-0007.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c3-fig-0008.jpg

96.5 KB | W: | H:

docs/img/c3-fig-0008.jpg

11.7 KB | W: | H:

docs/img/c3-fig-0008.jpg
docs/img/c3-fig-0008.jpg
docs/img/c3-fig-0008.jpg
docs/img/c3-fig-0008.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c3-fig-0009.jpg

56.3 KB | W: | H:

docs/img/c3-fig-0009.jpg

5.2 KB | W: | H:

docs/img/c3-fig-0009.jpg
docs/img/c3-fig-0009.jpg
docs/img/c3-fig-0009.jpg
docs/img/c3-fig-0009.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c3-fig-0010.jpg

74.5 KB | W: | H:

docs/img/c3-fig-0010.jpg

8.3 KB | W: | H:

docs/img/c3-fig-0010.jpg
docs/img/c3-fig-0010.jpg
docs/img/c3-fig-0010.jpg
docs/img/c3-fig-0010.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c3-fig-0011.jpg

134.0 KB | W: | H:

docs/img/c3-fig-0011.jpg

15.1 KB | W: | H:

docs/img/c3-fig-0011.jpg
docs/img/c3-fig-0011.jpg
docs/img/c3-fig-0011.jpg
docs/img/c3-fig-0011.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c3-fig-0012.jpg

39.7 KB | W: | H:

docs/img/c3-fig-0012.jpg

3.1 KB | W: | H:

docs/img/c3-fig-0012.jpg
docs/img/c3-fig-0012.jpg
docs/img/c3-fig-0012.jpg
docs/img/c3-fig-0012.jpg
  • 2-up
  • Swipe
  • Onion skin
docs/img/c3-fig-0013.jpg

39.4 KB | W: | H:

docs/img/c3-fig-0013.jpg

3.2 KB | W: | H:

docs/img/c3-fig-0013.jpg
docs/img/c3-fig-0013.jpg
docs/img/c3-fig-0013.jpg
docs/img/c3-fig-0013.jpg
  • 2-up
  • Swipe
  • Onion skin
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。