SICP 准备
一种 Scheme 实现
刷 SICP 不局限于特定的 Scheme 实现, 虽然 MIT-Scheme 是 MIT 出的. 然而 MIT 自己都废掉了它而指定 DrScheme 为默认课程支持版本. 本文基于的 Scheme 实现是 Chicken.
macOS 下安装很简单:
$ brew install chicken |
一个编辑器
对于Scheme来说, 恐怕支持最好的就是 Emacs 了. 同样本文基于 Emacs 的定制配置版本 Spacemacs.
Spacemacs 本身就有一个 Scheme 的 Layer 可供使用, 我使用了一个基于它, 自己定制的 Layer(x-scheme).
x-scheme 依赖于 Geiser 提供 REPL 等各种便利的功能, 它使用了 Chicken 的某些扩展, 可以通过以下命令安装:
$ chicken-install chicken-doc apropos sicp # 包含 sicp 支持 |
一个例子
Chicken 通过 sicp 扩展对 SICP 提供某些便利的支持, 比如一些 SICP 默认已经有了的过程(average 等). 例如 SICP 练习第一章1.7:
(use sicp) ;; sicp 扩展 |
SICP 实用性
我们做一件事情的时候有时很喜欢考虑这个东西实用不实用, 做了有什么收益. 这没什么问题, 特别是别人问你刷 SICP 有什么用的时候, 很难回答. 因为你工作或生活中确实没有用它的场景, 甚至是产品. SICP 中文版序前有段话挺好的, 在这里分享一下:
我认为, 在计算机科学中保持计算中的趣味性是特别重要的事情. 这一学科在起步时饱含着趣味性. 当然, 那些付钱的客户们时常觉得受了骗. 一段时间之后, 我们开始严肃地看待他们的抱怨. 我们开始感觉到, 自己真的像是要负起成功地、无差错地、完美地使用这些机器的责任. 我不认为我们可以做到这些. 我认为我们的责任是去拓展这一领域, 将其发展到新的方向, 并在自己的家里保持趣味性. 我希望计算机科学的领域绝不要丧失其趣味意识. 最重要的是, 我希望我们不要变成传道士, 不要认为你是兜售圣经的人, 世界上这种人已经太多了. 你所知道的有关计算的东西, 其他人也都能学到. 绝不要认为似乎成功计算的钥匙就掌握在你的手里. 你所掌握的, 也是我认为并希望的, 也就是智慧: 那种看到这一机器比你第一次站在它面前时能做得更多的能力, 这样你才能将它向前推进. Alan J. Perlis