

# 致谢

《计算机程序的结构和解释 (SICP JS)的 JavaScript 改编是在新加坡国立大学(NUS)为课程 CS1101S 开发的。该课程由 Low Kok Lim 共同教授了六年，他良好的教学判断对该课程和该项目的成功至关重要。CS1101S 教学团队包括许多新加坡国立大学的同事和 300 多名本科生助教。他们在过去九年里不断的反馈让我们解决了无数特定于 JavaScript 的问题，消除了不必要的复杂性，同时保留了 SICP 和 JavaScript 的基本特性。

SICP JS 是一个软件项目，也是一个图书项目。我们在 2008 年从原作者处获得了![f6-fig-5001.jpg](img/f6-fig-5001.jpg)图书来源。早期的 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 的精彩书籍。

我们感谢那些为使这本书成为一本真正的书做出贡献的人，特别是特里·艾林、拉里·科恩和麻省理工学院出版社的保罗·贝奇。艾拉·马泽尔找到了精彩的封面图片。对于第二版，我们特别感谢伯纳德和艾拉·马泽尔对书籍设计的帮助，以及非凡的巫师大卫·琼斯![f6-fig-5002.jpg](img/f6-fig-5002.jpg)。我们也非常感谢那些对新草稿发表深刻评论的读者:雅各布·卡泽尼尔森、哈迪·梅尔、吉姆·米勒，特别是布莱恩·哈维，他对这本书的贡献就像朱莉对他的书《简单计划》的贡献一样。

最后，我们要感谢多年来鼓励这项工作的各组织的支持，包括由 Ira Goldstein 和 Joel Birnbaum 促成的惠普公司的支持，以及由鲍勃·卡恩促成的 DARPA 的支持。

—哈罗德·艾贝尔森和杰拉德·让伊·萨斯曼



计算机程序的结构和解释

JavaScript 版本