新書推薦:
![核能话语变迁:科技、媒介与国家](http://103.6.6.69/upload/mall/productImages/y24/8/9787522839486.jpg)
《
核能话语变迁:科技、媒介与国家
》
售價:HK$
105.0
![白莫卧儿人:爱情、战争与18世纪的印度](http://103.6.6.69/upload/mall/productImages/y24/8/9787522834092.jpg)
《
白莫卧儿人:爱情、战争与18世纪的印度
》
售價:HK$
174.6
![从观念到艺术:在中国文化中发现慈悲](http://103.6.6.69/upload/mall/productImages/y24/8/9787522835754.jpg)
《
从观念到艺术:在中国文化中发现慈悲
》
售價:HK$
106.0
![罗曼诺夫王朝衰亡史](http://103.6.6.66/upload/mall/productImages/24/29/9787547244678.jpg)
《
罗曼诺夫王朝衰亡史
》
售價:HK$
149.3
![碧山15 食物续](http://103.6.6.66/upload/mall/productImages/24/29/9787571118990.jpg)
《
碧山15 食物续
》
售價:HK$
78.2
![汗青堂丛书142·帝国的胜利:从哈德良到君士坦丁的罗马世界](http://103.6.6.66/upload/mall/productImages/24/30/9787522524733.jpg)
《
汗青堂丛书142·帝国的胜利:从哈德良到君士坦丁的罗马世界
》
售價:HK$
105.8
![汗青堂丛书141·帝国的开端:从共和国到哈德良的罗马](http://103.6.6.66/upload/mall/productImages/24/30/9787522525990.jpg)
《
汗青堂丛书141·帝国的开端:从共和国到哈德良的罗马
》
售價:HK$
124.2
![海外中国研究·中正之笔:颜真卿书法与宋代文人政治(艺术系列)](http://103.6.6.69/upload/mall/productImages/y24/8/9787214287892.jpg)
《
海外中国研究·中正之笔:颜真卿书法与宋代文人政治(艺术系列)
》
售價:HK$
171.4
|
編輯推薦: |
本书是关于程序组织策略灵活性的大师之作,是《计算机程序的构造和解释》的“高级续篇”。本书源于麻省理工学院的课程讲义,结合两位作者多年的编程经验,描述了用于构建人工智能应用以及编译器等复杂系统的有效技术。这些技术将帮助程序员灵活地建立系统,了解其中的依赖关系,从而避免陷入编程困境。
|
內容簡介: |
本书主要介绍如何利用数学符号操作、基于规则的系统和通用程序构建灵活的软件,并利用依赖系统跟踪、解释和控制回溯。第1章通过对编程哲学的介绍提出灵活性的概念。第2章探讨如何用一些普遍适用的方法构建易于扩展的系统。第3章介绍谓词分派的通用程序。第4章介绍符号模式匹配,首先启用术语重写系统,然后通过合一展示类型推理的实现。第5章探讨解释和编译。第6章展示如何构造分层数据和分层程序的系统,并用各种元数据注释其中的数据项。第7章引入传播这一概念来摆脱计算机语言的面向表达式范式。
|
關於作者: |
克里斯·汉森(Chris Hanson)目前在Datera公司担任技术人员,他曾在麻省理工学院工作多年,是MIT/GNU Scheme系统的主要开发者。他还曾在谷歌工作10年。
杰拉尔德·杰伊·萨斯曼(Gerald Jay Sussman)麻省理工学院松下电气工程教授。自1964年以来,他一直参与麻省理工学院的人工智能研究。他的研究重点是了解科学家和工程师使用的问题解决策略,目标是自动化部分过程并将其形式化,以提供更有效的科学和工程教育方法。他还从事计算机语言、计算机体系结构和VLSI设计方面的工作。他是IEEE终身会士、NAE院士、AAAI会士、ACM会士、 AAAS会士。
|
目錄:
|
目 录
译者序推荐序前 言
致 谢
第 1 章 自然和设计中的灵活性 1
1.1 计算体系结构 3
1.2 灵活的智能组件 4
1.3 冗余和简并 7
1.4 探索行为 9
1.5 灵活性的成本 10
第 2 章 领域专用语言 13
2.1 组合器 13
2.1.1 函数组合器 14
2.1.2 组合器和形体构造 24
2.2 正则表达式 25
2.2.1 一种正则表达式组合语言 26
2.2.2 翻译器的实现 26
2.3 包装器 32
2.3.1 定制化包装器 34
2.3.2 实现定制器 35
2.3.3 适配器 36
2.4 抽象领域模型 37
2.4.1 单一化实现 38
2.4.2 领域模型分解 41
2.5 小结 46
第 3 章 算 术 主题 48
3.1 组合算术 48
XIII
3.1.1 一个简单的 ODE 积分器 48
3.1.2 调整算术运算符 50
3.1.3 组合运算 52
3.1.4 算术函数 57
3.1.5 组合器问题 60
3.2 可扩展的通用程序 63
3.2.1 通用运算 65
3.2.2 构建取决于顺序 68
3.2.3 实现通用程序 70
3.3 示例:自动微分 75
3.3.1 自动微分的工作原理 77
3.3.2 n 元函数的导数 81
3.3.3 一些技术细节 82
3.3.4 微分参数的文字函数 90
3.4 高效的通用程序 91
3.4.1 trie 91
3.4.2 缓存 96
3.5 高效的用户自定义类型 97
3.5.1 谓词的类型 97
3.5.2 谓词之间的关系 99
3.5.3 谓词调度关键字 99
3.5.4 示例:冒险游戏 101
3.6 小结 113
第 4 章 模式匹配 115
4.1 模式 115
4.2 项重写 117
4.2.1 代数中的段变量 118
4.2.2 规则系统的实现 120
4.2.3 旁白:魔术宏 122
4.2.4 有向模式调用 123
4.3 匹配器设计 124
4.3.1 编译模式 130
4.3.2 匹配变量限制 132
4.4 合一匹配 135
XIV
4.4.1 合一的工作原理 137
4.4.2 应用:类型推断 143
4.4.3 类型推断的工作原理 144
4.4.4 添加段变量— 一个实验 150
4.5 图上的模式匹配 155
4.5.1 将列表表示为图 155
4.5.2 实现图 156
4.5.3 图上的匹配 158
4.5.4 棋盘和可交换图形视图 160
4.5.5 棋步 164
4.5.6 实现图形匹配 167
4.6 小结 172
第 5 章 评 估 174
5.1 通用 eval/apply 解释器 174
5.1.1 eval 175
5.1.2 apply 182
5.2 具有非严格参数的程序 187
5.3 编译为可执行程序 194
5.4 探索行为 202
5.4.1 amb 203
5.4.2 实现 amb 205
5.5 探索潜在连续 210
5.5.1 作为非本地出口的连续 213
5.5.2 控制权的非本地转移 214
5.5.3 从连续到 amb 216
5.6 能力与责任 223
第 6 章 分 层 225
6.1 使用分层 225
6.2 分层的实现 226
6.2.1 分层数据 227
6.2.2 分层程序 229
6.3 分层算法 232
6.3.1 单位运算 233
XV
6.4 使用依赖项注释值 237
6.4.1 支持层 239
6.4.2 提供正当性 243
6.5 分层的前景 243
第 7 章 传 播 245
7.1 示例:到恒星的距离 246
7.2 传播机制 257
7.2.1 单元 257
7.2.2 传播器 259
7.3 多种不同的世界观 261
7.4 合并值 263
7.4.1 合并基值 263
7.4.2 合并支持值 264
7.4.3 合并值集 265
7.5 搜索可能的世界 266
7.5.1 依赖定向回溯 268
7.5.2 解决组合问题 273
7.6 传播导致简并 277
后 记 279 附录 A 支持软件 281 附录 B Scheme 编程语言 283 参考文献 297
|
內容試閱:
|
前 言
我们都曾花费太多的时间试图改造一段旧的代码,以便能以一种编写时没有意识到的方式使用它。这是一种可怕的时间和精力上的浪费。不幸的是,对我们而言,要为一个非常具体的目的写出特别好用的代码,并且很少有可重复使用的部分,是一件很有压力的事情。但我们认为,这并不是必要的。
我们很难建立一个系统,使其在比设计者预期的更大范围内具有可接受行为。最好的系统是可进化的,只需稍加修改就能适应新的环境。我们怎样才能设计出具有这种灵活性的系统呢?
如果我们为程序添加一个新的功能时所要做的就只是添加一些代码,而不改变现有的代码库,那就太棒了。我们通常可以通过在构建代码库时使用特定组织原理,同时加入适当的钩子(hook)来实现这一目的。
对生物系统的观察告诉我们很多关于如何建立灵活和可进化系统的知识。最初为支持符号人工智能而开发的技术通常被认为可以提高程序和其他工程系统灵活性和适应性。相比之下,计算机科学的普遍做法是不鼓励构建便于在新环境中使用的易于修改的系统。
我们的编程经常把自己逼到死胡同里,不得不花大力气重构代码以摆脱这些死胡同。现在,我们已经积累了足够的经验,可以识别、分离并展示我们发现的对构建大型系统有效的策略和技术,这些策略和技术可以适应原始设计中没有预料到的目的。在本书中,我们分享了多年编程经验总结而成的一些成果。
关于本书
本书是为了在麻省理工学院教授计算机程序设计而编写的。我们在多年前就开设了这门课,打算让高年级本科生和研究生了解用于构建人工智能应用的核心程序的有效技术,如数学符号操作和基于规则的系统。
我们希望学生能够灵活地建立这些系统,这样就可以轻松地将这些系统组合起来,从而形成更强大的系统。我们还想让学生了解依赖关系,包括如何跟踪它们以及如何利用它们来解释和控制回溯。
虽然这门课过去和现在都很成功,但事实证明,一开始我们对这门课的理解并不像我们最初认为的那样深入。因此,我们投入了大量的精力来推敲打磨,使我们的想法更加精确,并且意识到这些技术不仅可以用于人工智能应用。任何正在构建复杂系
VIII
统(如计算机语言编译器和集成开发环境)的人,都会从我们的经验中受益。本书是由我们的课程中正在使用的讲义以及问题集整理而成的。
主要内容
本书中的内容比一个学期课程所能涵盖的知识更加丰富。因此,我们每次上课时都会挑选部分内容进行讲解。第 1 章是对编程哲学的介绍。我们在自然和工程的大背景下提出了灵活性的概念,并试图说明灵活性是与效率和正确性同样重要的问题。在随后的每一章中都介绍了一些技术,并通过一组练习来说明这些技术。这是本书的一个重要组织原则。
在第 2 章中,我们探讨了用一些普遍适用的方法构建易于扩展的系统。组织灵活系统的一个强有力的方法是把它建成特定领域语言的集合体,每一种语言都适合轻松表达一个子系统的构造。我们设计了开发特定领域语言的基本工具,展示了如何围绕混合 - 匹配组件来组织子系统,如何用组合器来灵活地组合它们,如何用包装器来泛化组件,以及如何通过抽象出领域模型来简化程序设计。
在第 3 章中,我们介绍了极其强大但有潜在危险的灵活性技术—谓词调度的通用程序。我们从泛化算术以处理符号代数表达式开始,展示如何通过使用数据的类型标记使这种泛化变得高效。我们通过设计一个简单但易于详细说明的冒险游戏来展示该技术的能力。
在第 4 章中,我们介绍了符号模式匹配,首先启用了术语重写系统,然后通过合一展示了类型推理是如何轻松实现的。在这里,我们遇到了由于段变量而需要进行回溯的问题。合一是我们看到表示和组合部分信息结构的力量的第一个地方。在本章的最后,我们将这个想法扩展到匹配一般的图上。
在第 5 章中,我们探讨了解释和编译的力量。我们认为,程序员应该知道如何摆脱他们必须使用的任何编程语言的束缚,为一种更适合表达当前问题的解决方案的语言制作一个解释器。我们还展示了如何通过在解释器 / 编译器系统中实现非确定性的
amb 来自然地纳入回溯搜索,以及如何使用连续。
在第 6 章中,我们展示了如何构造分层数据和分层程序的系统,其中每个数据项都可以用各种元数据进行注释。底层数据的处理不受元数据的影响,处理底层数据的代码甚至不知道或已引用元数据。然而,元数据是由它自己的程序处理的,有效地与数据并行。我们通过给数字量附加单位来说明这一点,并展示如何携带依赖性信息, 就像从原始来源得到的那样给出数据的出处。
前面所述的一切都汇集在第 7 章,在这章我们引入了传播,以摆脱计算机语言的面向表达式范式。在这章,我们有一个将模块连接在一起的布线图设想,允许灵活地纳入部分信息的多个来源。使用分层数据来支持对依赖关系的跟踪,可以实现依赖定
IX
向回溯,从而大大减小大型复杂系统的搜索空间。
本书可用于各种高年级课程,在随后的所有章节中都使用了第 2 章介绍的组合器
|
|