Home - CloneableX/SICP-learning GitHub Wiki

写在最后

从文章呈现顺序上来说,本篇文章写在所有文章的最前,其实从编写顺序上来说它确实是写在最后。这里包含了一些 SICP 的导读,以及我学习 SICP 过程中的一些学习产物(包括文章示例代码、课后练习代码及学习笔记)。

SICP 中相关的代码部分我已经放置在 SICP 仓库中。学习笔记我是使用 Obsidian 记录,主要是为了梳理知识图谱,你可以从 SICP 笔记拉取文件后用 Obsidian 软件打开查看。接下来是导读部分。

我学习的为 SICP 第 2 版,书籍中使用的主要编程语言为 Scheme(属于 Lisp 的一门方言)。如果你不曾接触过该语言也无需担心,因为 SICP 会从 Scheme 最基础的部分开始讲起,最终编写 Scheme 的解释器和寄存器机器。

在 SICP 的第 1 章,主要描述了 Scheme 最重要的元素——程式,你也可以理解为函数,它在 Scheme 中属于第一公民。第 1 章会通过程式让你掌握 Scheme 的基本语法,并通过程式演示 Scheme 提供的抽象能力。

在 SICP 的第 2 章,主要描述了 Scheme 中的另一种元素——数据。其中不仅介绍了常见的数据类型,同时还讲解了一种比较特别的数据类型—— symbol 数据。同时基于数据的介入,本章同时介绍了对于数据的抽象,包括一些数据结构以及与这些抽象相关的系统设计方法。

在第 3 章中,向前两章讲解的函数式编程中加入了一个小小的特性——修改数值,其实也就是向函数式编程中加入了可变状态特性。这导致不随时间而变化的函数出了随时间变化的特性,同时将引出并发问题及锁和流等解决方案。

上述的章节不仅介绍了 Scheme 的语法知识、特性,同时还穿插讲解了 Scheme 的计算模型。在此基础上,第 4 章使用 Scheme 编写了一个 Scheme 的求值器,主要是基于环境计算模型实现。除了基础的求值器外,同时演示了几种不同的求值器变种,包括惰性求值器、不定计算求值器和逻辑计算求值器。

最后一章中,SICP 将带领我们深入求值器的底层,也就是寄存器机器中探索。本章在讲解了寄存器机器语言基础上,演示了使用 Scheme 开发一个寄存器机器模拟器,同时实现了 Scheme 的显示求值器机器和编译器。

上述是 SICP 书籍的主要脉络,SICP 的内容由浅入深,在不知不觉间便能领略编程语言的根本,同时以此为出发点,对自己熟悉的编程语言也有了新审视。