SICP 解题集

_images/cover.jpg

这个文档的目标是成为中文化的、完整的《计算机程序的构造和解释》一书的解题集。

这个解题集的特色是:

对于每道习题,除了习题答案之外,还给出习题的讲解和相关资料(如果有的话);
使用 MIT Scheme 作为编程环境,完全避免了代码不兼容的问题;
所有代码都经过测试,确保准确性。

相关软件和链接 介绍了这个解题集中用到的程序和工具。

第一章: 构造过程抽象

第二章: 构造数据抽象

第三章: 模块化、对象和状态

第四章: 元语言抽象

  • 4.1 元循环求值器

  • 4.2 Scheme 的变形 —— 惰性求值

    • 4.2.1 正则序和应用序(chp4/25chp4/26)
    • 4.2.2 一个采用惰性求值的解释器(chp4/27chp4/28chp4/29chp4/30chp4/31)
    • 4.2.3 将流作为惰性的表(chp4/32chp4/33chp4/34)
  • 4.3 Scheme 的变形 —— 非确定性求值

    • 4.3.1 amb 和搜索(chp4/35chp4/36chp4/37)
    • 4.3.2 非确定性程序的实例(chp4/38chp4/39chp4/40chp4/41chp4/42chp4/43chp4/44chp4/45chp4/46chp4/47chp4/48chp4/49)
    • 4.3.3 实现 amb 求值器(chp4/50chp4/51chp4/52chp4/53chp4/54)
  • 4.4 逻辑程序设计

    • 4.4.1 演绎信息检索(chp4/55chp4/56chp4/57chp4/58chp4/59chp4/60chp4/61chp4/62chp4/63)
    • 4.4.2 查询系统如何工作
    • 4.4.3 逻辑程序设计是数理逻辑吗(chp4/64chp4/65chp4/66chp4/67chp4/68chp4/69)
    • 4.4.4 查询系统的实现(chp4/70chp4/71chp4/72chp4/73chp4/74chp4/75chp4/76chp4/77chp4/78chp4/79)

第五章: 寄存器机器里的计算

  • 5.1 寄存器机器的设计(chp5/1)

    • 5.1.1 一种描述寄存器机器的语言(chp5/2)
    • 5.1.2 机器设计的抽象(chp5/3)
    • 5.1.3 子程序
    • 5.1.4 采用堆栈实现递归(chp5/4chp5/5chp5/6)
    • 5.1.5 指令总结
  • 5.2 一个寄存器机器模拟器(chp5/7)

    • 5.2.1 机器模型
    • 5.2.2 汇编程序(chp5/8)
    • 5.2.3 为指令生成执行过程(chp5/9chp5/10chp5/11chp5/12chp5/13)
    • 5.2.4 监视机器执行(chp5/14chp5/15chp5/16chp5/17chp5/18chp5/19)
  • 5.3 存储分配和废料收集

    • 5.3.1 将存储看作向量(chp5/20chp5/21chp5/22)
    • 5.3.2 维持一种无穷存储的假象
  • 5.4 显式控制的求值器

    • 5.4.1 显式控制求值器的内核
    • 5.4.2 序列的求值和尾递归
    • 5.4.3 条件、赋值和定义(chp5/23chp5/24chp5/25)
    • 5.4.4 求值器的运行(chp5/26chp5/27chp5/28chp5/29chp5/30)
  • 5.5 编译

    • 5.5.1 编译器的结构(chp5/31chp5/32)
    • 5.5.2 表达式的编译
    • 5.5.3 组合式的编译
    • 5.5.4 指令序列的组合
    • 5.5.5 编译代码的实例(chp5/33chp5/34chp5/35chp5/36chp5/37chp5/38)
    • 5.5.6 词法地址(chp5/39chp5/40chp5/41chp5/42chp5/43chp5/44)
    • 5.5.7 编译代码和求值器的互连(chp5/45chp5/46chp5/47chp5/48chp5/49chp5/50chp5/51chp5/52)

项目进度

目前项目仍处于开发阶段,贡献、提交建议或意见,请到项目的 github 页面: https://github.com/huangz1990/SICP-answers

下载离线版本

HTML 格式

注意,因为文档总是在不断地更新和修正当中,请定期下载最新的离线文档,确保获得最好的阅读体验。

关于

这个解题集的绝大部分练习由 huangz 完成,在我遇上解不出的问题时, Eli Bendersky 的 SICP 解答sicp.org.ua 上的 WIKI 总能给我很大帮助,在此对他们表示感谢。

你可以免费下载、阅读、复制、传播和修改本文档及相应的代码示例,如果需要其他使用许可,请用以下任一方式联系本人: 向 gmail 帐号 huangz1990 发送邮件 / 豆瓣 / twitter

讨论

blog comments powered by Disqus