计算机程序的构造和解释第二版pdf免费版|百度网盘下载

编者评论:计算机程序的构建和解释第二版pdf

《计算机程序的构造与解释(原书第2版)》出版于1984年,形成于麻省理工学院(MIT)多年使用的教科书中。 1996年修订为第2版。从理论上解释计算机程序的创建、执行和研究。有兴趣的请下载。

简介

《计算机程序的构造与解释(原书第2版)》出版于1984年,形成于麻省理工学院(MIT)使用多年的一本教科书中,于2018年修订为第2版1996. 在过去的二十年里,

计算机程序的构建和解释(第 2 版)对计算机科学的教育项目产生了深远的影响。第二版中大部分重要的编程系统都经过了重新设计和测试,包括各种解释器和编译器。根据接下来十年的教学实践,作者还对其他许多细节进行了相应的修改。

相关内容部分预览

关于作者

Harold Abelson 是 1992 年麻省理工学院 MacVicar 教员。曾就职于麻省理工学院电气工程与计算机科学系,获得了重要的计算机科学教育奖项——IEEE计算机学会布斯奖。
Gerald Jay Sussman 是松下电气工程教授。曾就职于麻省理工学院电气工程与计算机科学系,并获得了一项重要的计算机科学教育奖项——ACM 的 Karlstrom 奖。
Julie Sussman 是一位作家和编辑,使用自然语言和计算机语言写作。

目录

出版商的话
前言
第二版前言
第一版前言
致谢
第 1 章构造过程抽象 1
1.1 编程的基本要素 3
1.1、 1 表达式 3
1.1.2 命名和环境 5
1.1.3 组合评估 6
1.1.4 复合过程 7
1.1.5 过程应用程序的替换模型 9
1.1.6条件表达式和谓词 11
1.1.7 示例:使用牛顿法的平方根 14
1.1.8 作为黑盒抽象的过程 17
1.2 过程及其产生的计算 20
1.2.1 线性递归和迭代 21
1.2.2 树递归 24
1.2.3 增长顺序 28
1.2.4 求幂 29
1.2.5 最大公约数 32
1.2.6 示例:素数数字检测 33
1.3 使用高阶函数进行抽象 37
1.3.1 过程作为参数 37
1.3.2 使用 lambda 构造过程 41
1.3.3 过程 方法作为通用 44
1.3.4 作为返回值的过程 48
第 2 章 构造数据抽象 53
2.1 数据抽象简介 55
2.1.1 示例:有理数的算术运算 55 < br>2.1.2 抽象障碍 58
2.1.3 数据的含义 60
2.1.4 扩展练习:区间算术 62
2.2 分层数据和闭包属性 65
2.2.1 66 的序列表示
2.2.2层次结构 72
2.2.3 序列作为常规接口 76
2.2.4 示例:图形语言 86
2.3 符号数据 96
2.3 .1 引用 96
2.3.2 示例:符号推导 99
2.3.3 示例:集合的表示 103
2.3.4 示例:霍夫曼代码树 109
2.4 抽象数据的多重表示 115
2.4.1 复数的表示 116
2.4.2 标记数据 119
2.4.3 面向数据的编程和可加性 122
2.5 具有通用运算的系统 128
>2.5.1 通用算术运算 129
2.5 .2 组合不同类型的数据 132
2.5.3 示例:符号代数 138
第 3 章 模块化、对象和状态 149
3.1 赋值和局部状态 149
3.1.1 局部状态变量 150
3.1.2 引入赋值的好处 154
3.1.3 引入赋值的成本 157
3.2 评估的环境模型 162
3.2.1 评估规则 163
3.2.2 应用简单过程的 165
3.2.3 将框架视为本地状态的展位 167
3.2.4 内部定义 171
3.3 更改数据的模拟 173
3.3 .1 更改的表结构 173
3.3.2 队列表示 180
3.3.3 表表示 183
3.3.4 数字电路仿真 188
3.3.5 约束传播 198
3.4 并发:时间是一个基本问题 206
3.4.1 并发系统中时间的属性 207
3.4.2 控制并发的机制 210
3.5 流 220
3.5.1 流作为时间的延迟表 220
3、 5.2 无限流 226
3.5.3 流计算模式的使用 232
3.5.4 流和延迟评估 241
3.5.5 功能程序和对象的模块化
模块化 245
第 4 章元语言抽象 249
4.1 Metaloop 评估器 251
4.1.1 评估器的内核 252
4.1.2 表达式表示 255
4.1.3 评估器数据结构 260
4.1.4 将评估器作为程序运行264
4.1.5 将数据作为程序 266
4.1.6 内部定义 269
4.1.7 将解析与执行分开 273
4.2 方案变体 - 惰性求值 276
4.2.1 正则和应用程序订单 277
4.2.2 具有惰性求值的解释器 278 < br>4.2.3 惰性表 >4.3.3 实现 amb 求值器 296
4.4 逻辑编程 304
4.4.1 演绎信息检索306
4.4.2 查询系统如何工作 315
4.4.3 逻辑编程就是数学 逻辑 321
4.4.4 查询系统的实现 324
第 5 章计算n in 寄存器机 343
5.1 寄存器机的设计 344
5.1.1 描述寄存器机的语言 346
5.1.2 机器设计的抽象 348
5.1.3 子程序 351
5.1 .4 使用堆栈实现递归 354
5.1.5 指令摘要 358
5.2 寄存器机器模拟器 359
5.2.1 机器模型 360
5.2.2 汇编器 364
5.2.3为指令生成执行 366
5.2.4 监控机器执行 372
5.3 存储分配和垃圾收集 374
5.3.1 将存储视为向量 374
5.3.2 维护虚假的无限存储 378 < br>5.4 显式控制的评估器 383
5.4.1 显式控制评估器的内核 384
5.4.2 序列评估和尾递归 388
5.4.3 条件、分配和定义 391
5.4 .4 求值者的运行 393
5.5 编译 397
5.5.1 编译器结构 399
5.5.2 表达式编译 402
5.5.3 组合编译n 407
5.5.4 指令序列组合 412
5.5.5 编译代码实例 415
5.5.6 词法地址 422
5.5.7 编译代码与评估器的互连 425
参考 431
练习表 437
索引 439

摘自原文

把数值当作“简单数据”,实在是虚张声势。事实上,数值的处理是任何编程语言中最复杂和最令人困惑的事情之一。涉及的典型问题包括:

一些计算机系统区分整数(例如 2)和实数(例如 2.71)。那么实数 2.00 与整数 2 有什么不同吗?用于整数的算术运算与用于实数的算术运算相同吗?将 6 除以 2 的结果是 3 还是 3.0?

我们可以表示的最大数字是多少?可以表示的最大精度中包含多少个十进制数字?整数的表示范围和实数一样吗?

阅读剩余
THE END