第一章 构造过程抽象

  • 程序设计的基本元素
    • 表达式
    • 命名和环境
    • 组合式的求值
    • 复合过程
    • 过程应用的代换模型
    • 条件表达式和谓词
    • 实力:采用牛顿法求平方根
    • 过程作为黑箱抽象
  • 过程与他们所产生的计算
    • 线性递归和迭代
    • 树形递归
    • 增长的阶
    • 求幂
    • 最大公约数
    • 实例: 素数检测
  • 用高阶函数做抽象
    • 过程作为参数
    • 用lamdda构造过程
    • 过程作为一般性的方法
    • 过程作为返回值

第二章 构造数据抽象

  • 数据抽象引导
    • 实例:有理数的算术运算
    • 抽象屏障
    • 数据意味着什么
    • 拓展练习:区间算术
  • 层次性数据和闭包性质
    • 序列的表示
    • 层次性结构
    • 序列作为一种约定的界面
    • 实例:一个图形语言
  • 符号数据
    • 引号
    • 实例: 符号求异
    • 实例: 集合的表示
    • 实例: Huffman编码树
  • 抽象数据的多重表示
    • 复数的表示
    • 带标志数据
    • 数据导向的程序设计和可加性
  • 带有通用型操作的系统
    • 通用型算数运算
    • 不同类型数据的组合
    • 实例:符号代数

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

  • 赋值和局部状态
    • 局部状态变量
    • 引进赋值带来的利益
    • 引进赋值的代价
  • 求职的环境模型
    • 求值规则
    • 简单过程的应用
    • 将框架看作局部状态的展台
    • 内部定义
  • 用变动数据做模拟
    • 变动的表结构
    • 队列表示
    • 表格的表示
    • 数字电路的模拟
    • 约束的传播
  • 并发:时间事一个本质问题
    • 并发系统中时间的性质
    • 控制并发的机制
    • 流作为延时的表
    • 无穷流
    • 流计算模式的使用
    • 流和延时求值
    • 函数式程序的模块化的对象的模块化

第四章 元语言抽象

  • 元循环求值器
    • 求值器的内核
    • 表达式的表示
    • 求值器数据结构
    • 作为程序运行这个求值器
    • 将数据作为程序
    • 内部定义
    • 将语法分析与执行分离
  • Scheme的变形——惰性求值
    • 正则序和应用序
    • 一个采用惰性求值的解释器
    • 将流作为惰性的表
  • Scheme的变形——非确定性计算
    • amb和搜索
    • 非确定性程序的实例
    • 实现amb求值器
  • 逻辑程序设计
    • 演绎信息检索
    • 查询系统如何工作
    • 逻辑程序设计师数理逻辑吗
    • 查询系统的实现

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

  • 寄存器机器的设计
    • 一种描述寄存器机器的语言
    • 机器设计的抽象
    • 子程序
    • 采用堆栈实现递归
    • 指令总结
  • 一个寄存器及其模拟器
    • 机器模型
    • 汇编程序
    • 为指令生成执行过程
    • 监视机器执行
  • 存储分配和废料收集
    • 将存储看作向量
    • 维持一种无穷存储的假象
  • 显示控制的求值器
    • 显示控制求值器的内核
    • 序列的求值和尾递归
    • 条件、赋值和定义
    • 求值器的运行
  • 编译
    • 编译器的结构
    • 表达式的编译
    • 组合式的编译
    • 指令序列的组合
    • 编译代码的实例
    • 词法地址
    • 编译代码与求值器的互联

参考文献

练习表

索引