学习SICP(《计算机程序的构造和解释》)的一些准备工作

学习SICP(《计算机程序的构造和解释》)的一些准备工作

最近刚好把SICP看完,在学习的过程中发现有些资源找起来有点费时间,于是我想把他们收集起来,方便其他人。涉及到的引用部分都会带上作者和链接,尊敬的作者如果您有异议,请私信或者评论,我会将其删除。(注:需要科学上网的地方我会标记为外网)

一、 环境的配置

1. 背景:

本来我是下载的MIT Scheme的,安装后无法正常打开,在外网Stack Overflow上的解决方法也都尝试,但是内存分配总是出错。我当前的操作系统是64位Window 10。况且,这个软件的更新还停留在2003年,最新支持也只到Windows 7。于是转而寻找替代方案。

2. 替代方案:

DrRacket对于Scheme也有很好的支持,之前叫做DrScheme。搜索下载,安装,一气呵成。(下载地址:download.racket-lang.org )软件安装好之后,还需要添加@周彦尚大佬提到还需要SICP package。安装步骤在网站上有,下载时记得挂上外网就行。(安装步骤:docs.racket-lang.org/si 中的Installation)中文界面在菜单栏的help里。安装完成后,在定义那一栏加上
”#lang sicp” 即可运行书本上的程序。

3. 详细的安装步骤可以看我的另一篇文章DrRacket 的安装与 SICP 的配置

二 、源代码

1. 使用源代码一来可以避免一下机械地操作,快速的打理好定义,特别在书本后面的求值器和编译器部分。二来对于课本中的特殊函数也可以马上定位,复制+ctrl F。源代码在书籍官网可以下载(地址:mitpress.mit.edu/sicp/ 中的Code from the book)

2. 对于一些需要导入整个文件来说,使用函数load会出错,网友Louis Christopher的博客中提到使用函数Require可解决。使用示例:
(#%require “需要导入的文件”)。(原文链接:louischristopher.me/set )另一个方法是是将预处理器改成#lang racket/load。

三、 视频

1. 视频可以加深对于书本内容的理解,学生的提问也让人很有启发。谢谢@DeathKing(不知道他在知乎是否是这个昵称)大佬的中文化项目:github.com/DeathKing/Le 。视频从《1A: Overview and Introduction to Lisp》开始到《10B: Storage Allocation and Garbage Collection》,从8B开始的内容就去油管看吧。

四 、答案

答案可以用来检验自己对于知识的掌握程度。huangz1990大神做了一个SICP的解题集。(链接:sicp.readthedocs.io/en/ )英文版的答案在scheme wiki里有。(SICP-Solution:
community.schemewiki.org )里面的函数点击后可以直达相应的官方文档。

五、 电子书

在书籍官网可以找到(链接:https://mitpress.mit.ed )。B站用户不稳固的支点提示,还有HTML版本。(链接:sarabander.github.io/si

六 、Scheme

《Yet Another Scheme Tutorial》是一本Scheme入门教程,由大神Death King翻译了放在网上(链接:deathking.github.io/yas

感谢大佬们的默默付出,SICP的学习之路才能畅通无阻。当然,谢谢@萧井陌的《编程入门指南 v1.5》。SICP简直是把编程的过程剖析得细致入微,就像书中引用的约翰尼斯·开普勒所说的一样,“我的目的是想说明,这一天空机器并不是一种天赐造物或者生命体,它不过是钟表一类的机械装置(而那些相信钟表有灵魂的人却将这一工作说成是其创造者的荣耀),在很大程度上,这里多种多样的运动都是由最简单的物质力量产生的,就像钟表里所有活动都是一个发条产生的一样“。


尾注:题图来自MIT官网ocw.mit.edu/courses/ele

编辑于 2018-05-19