目录 2
第1部分 基础知识 2
第1章 人工智能概述 2
1.1 人工智能的概念 2
1.1.1 人工智能 2
1.1.2 为什么要研究人工智能 3
1.1.3 人类智能的计算机模拟 4
1.2 人工智能的研究目标 7
1.3 人工智能研究的基本内容及特点 9
1.3.1 人工智能研究的基本内容 9
1.3.2 人工智能的研究途径与方法 10
1.3.3 人工智能研究的主要特点 12
1.4.1 经典的人工智能研究领域 14
1.4 人工智能的研究领域 14
1.4.2 基于脑功能模拟的领域划分 24
1.4.3 基于实现技术的领域划分 28
1.4.4 基于应用领域的领域划分 28
1.4.5 基于应用系统的领域划分 33
1.4.6 基于计算机系统结构的领域划分 34
1.4.7 基于实现工具与环境的领域划分 35
1.5 人工智能的基本技术 35
1.5.1 推理技术 35
1.5.2 搜索技术 36
1.5.3 知识表示与知识库技术 37
1.5.4 归纳技术 37
1.5.5 联想技术 37
1.6.2 符号主义学派 38
1 6 1 人工智能学科的产生 38
1.6 人工智能的产生与发展 38
1.6.3 连接主义学派 40
1.6.4 人工智能的发展趋势 41
1.6.5 中国人工智能的研究与发展 42
本章小结 42
习题1 44
第2章 知识表示方法 45
2 1 知识的基本概念 45
2.1 1 知识层次 45
2 1 2 知识的属性 46
2 1.3 知识分类 47
2.1.4 知识表示 48
2.2.2 论域和谓词 51
2 2 1 命题与真值 51
2 2 一阶谓词逻辑表示法 51
2 2 3 谓词公式与量词 52
2 2 4 谓词逻辑表示方法 53
2 2 5 谓词逻辑表示方法的BNF描述 54
2.2.6 谓词逻辑表示方法的特点 54
2 3 产生式表示法 55
2 3 1 产生式 55
2 3 2 产生式系统 56
2 3.3 产生式表示法的特点 61
2 3 4 产生式表示法与其他知识表示方法的比较 61
2 4 语义网络表示法 62
2 4 1 语义网络的基本结构 62
2 4 2 语义网络的知识表示 62
2 4 3 语义网络与Prolog 64
2 4.4 语义网络的求解流程 65
2 4 5 基本的语义关系 65
2.4.6 语义网络表示法的特点 67
2 4 7 语义网络法与其他知识表示方法的比较 67
2 5 框架表示法 68
2 5 1 框架的基本结构 68
2.5.2 框架的BNF描述 70
2 5.3 框架系统中的预定义槽名 71
2 5.4 框架系统的问题求解过程 72
2 5.5 框架系统的程序语言实现 73
2 5 6 框架系统的特点 73
2 6 脚本表示法 73
2 6 2 脚本的结构 74
2 6 1 概念依赖理论 74
2 6 3 脚本的推理 75
2.6.4 脚本表示法的特点 76
2 7 过程表示法 76
2.7.1 表示知识的方法 77
2 7 2 过程表示的问题求解过程 78
2 7 3 过程表示的特点 79
2 7.4 过程性与说明性表示方法的比较 79
2 8 Petri网表示法 79
2 8 1 Petri网的基本概念 80
2 8.2 表示知识的方法 80
2 8.3 Petri网表示法的特点 81
2 9 面向对象表示法 81
2 9 1 面向对象的基本概念 81
2 9 3 面向对象的知识表示 83
2 9 2 面向对象的基本特征 83
2 9 4 面向对象表示方法的特点 84
2 10 状态空间表示法 85
2 11 问题归约表示法 85
本章小结 86
习题2 86
第3章 AI编程基础 88
3 1 命题逻辑 88
3 1.1 命题 88
3 1 2 命题定律 90
3 1 3 范式 92
3 1 4 命题逻辑的推论规则 94
3.1 5 命题逻辑的局限性 94
3 2 1 谓词 95
3 2 一阶谓词逻辑 95
3 2 2 量词 96
3 2 3 谓词逻辑的合式公式 97
3 2 4 自由变元与约束变元 97
3 2 5 谓词公式的解释 98
3 2.6 含有量词的等价式和蕴含式 99
3 2 7 谓词逻辑中的推论规则 101
3 2.8 谓词公式的范式与斯柯林标准形 102
3 3 产生式系统 104
3 3 1 产生式系统的基本组成 104
3 3 2 产生式系统的基本过程 106
3.3.3 基于产生式系统的具体问题建模 107
3.3.4 产生式系统的类型 108
3.3.5 产生式系统的搜索策略 109
3.3.6 两种典型的产生式系统 112
3.4.1 专家系统的概念与组成 117
3.4 专家系统 117
3.4.2 专家系统的类型 120
3.4.3 专家系统的特点 122
3.4.4 专家系统的开发工具 123
3.4.5 新一代专家系统研究 124
本章小结 126
习题3 127
第2部分 编程指南 130
第4章 Visual Prolog概述 130
4.1 Visual Prolog 6概述 130
4.2 Visual Prolog 6基本特性 131
4.2.1 语言特性 131
4.2.4 链接器 132
4.2.5 调试器 132
4.2.2 图形化开发环境 132
4.2.3 编译器 132
4.3 创建项目 133
4.4 建立项目 134
4.5 浏览项目 135
4.6 开发项目 137
4.7 调试项目 140
本章小结 142
习题4 142
第5章 Prolog基础 143
5.1 Horn子句逻辑 143
5.2 Prolog推理机 145
5.3 扩展家庭定理 146
5.4 Prolog是一种编程语言 147
5.5 程序控制 148
5.5.1 失败 149
5.5.2 回溯 149
5.5.3 改进家庭定理 151
5.5.4 递归 152
5.5.5 副效应 153
5.5.6 小结 154
5.6 Prolog算符 154
5.6.1 算符 155
5.6.2 深入理解算符 156
5.6.3 算符与谓词 158
5.6.4 算符作为参数 158
5.6.5 算符递归 160
5.6.6 算符使用策略 161
5.6.7 小结 161
本章小结 161
习题5 162
第6章 类与对象 164
6.1 对象模型 164
6.2 类实体 165
6 3 模块 166
6 4 创建和访问对象 166
6.5 接口对象类型 167
6.6 多重实现 167
6 7 包容多态性 168
6 8 support类型扩展 168
6.10 继承 169
6.9 object超类型 169
6.11 对象体系的其他特点 171
6.12 Visual Prolog 5与Visual Prolog 6的差异 171
6.12.1 句点 171
6.12.2 谓词 171
6.12.3 谓词论域 172
6.12 4 引用论域 172
6.12.5 函数子句 172
6.12.6 常量 173
6.12.7 事实 173
6.12.8 事实变量 173
6.12.10 编译器命令 174
6.12.11 条件编译 174
6.12.9 嵌套表达式与函数 174
6.12.12 输入输出及特殊论域 175
6.12.13 省略与匿名参数类型 175
6.12.14 对象与类 176
6.12 15 库支持 176
本章小结 180
习题6 180
第7章 Visual Prolog编程 182
7.1 Visual Prolog基础 182
7.1.1 程序结构 182
7 1.2 目标 184
7.1.3 文件考虑 185
7.1.4 作用域访问 185
7 1.5 面向对象 186
7.1.6 一个完整的例子:family1.prj6 186
7.1.7 程序的取舍 192
7 2 Visual Prolog的GUI编程 193
7.1.8 小结 193
7 2 1 GUI概述 194
7 2.2 GUI对事件的响应 195
7.2.3 开始一个GUI项目 195
7.2.4 创建模态对话框 196
7.2.5 修改菜单 200
7.2 6 修改工具栏 202
7.2 7 在程序中添加主代码 204
7 2.8 压缩相关代码 206
7.2.9 分析所做的工作 209
7.2.10 运行程序 211
7.3.1 初始准备阶段 212
7 3.2 创建业务逻辑层 212
7.3 Visual Prolog的逻辑层 212
7 2.11 小结 212
7 3.3 在业务逻辑层上工作 213
7 3 4 创建业务逻辑类 214
7 3.5 理解业务逻辑类 217
7 3.6 连接业务逻辑层到GUI 217
7.3.7 理解事件处理程序 220
7 3 8 运行代码 221
7.3.9 细节考虑 221
7.3.10 小结 221
7.4 Visual Prolog的数据层 222
7.4.1 基本概念 222
7.4 2 程序 222
7.4 3 非模态对话框 225
7 4.5 接口 226
7.4 4 FamilyData包 226
7 4.6 FamilyDL包 227
7 4.7 FamilyDL包的代码 228
7 4.8 FamilyBLL包的代码 229
7.4 9 数据层的特征 230
7 4.10 小结 231
本章小结 231
习题7 231
第8章 编写CGI程序 232
8 1 概述 232
8 2 编写CGI程序基础 232
8 2.1 公共网关接口 232
8 2 2 CGI程序 235
8 2 3 测试CGI程序 238
8.2 4 用Visual Prolog 6创建CGI程序 239
8.2.5 测试examplel 241
8.2.6 应用程序功能分析 242
8.2 7 输入流分析 242
8 3 编写实用的CGI应用程序 242
8.3.1 将信息从HTML文件传输至CGI程序 242
8.3.2 解释信息流的高级CGI应用程序 244
8 3.3 信息从网络服务器到浏览器的传输 246
8.3.4 CGI应用程序简评 247
8 3.5 取代CGI程序的候选方案 247
8 3 6 加速CGI应用程序 247
8.3 7 CGI程序的客户端 247
8 3 8 使用Javascript对象的高级CGI应用程序 249
8 3 9 安全性问题 251
8 3.10 防止CGI程序被盗链 252
8 4 CGI应用程序测试实例 253
8 4 1 安装TinyWeb网络服务器 253
8 3 11 小结 253
8.4.2 TinyWeb的根目录 254
8.4.3 TinyWeb的端口 254
8.4.4 调试例子程序 254
8.4.5 用其他网络服务器运行例子程序 254
本章小结 254
习题8 255
第9章 编码风格 256
9.1 基本元素 256
9.1.1 关键字 256
9.1.2 半关键字 256
9.1.6 变量 257
9.1.7 谓词 257
9.1.3 文字 257
9.1.5 常量 257
9.1.4 标识符 257
9.1.8 论域 258
9.1.9 类和接口 258
9.2 推荐格式 258
9.2.1 折行 258
9.2.2 缩排 259
9.2.3 对齐 259
9.2.4 空格字符 259
9 3 程序结构 259
9.3.1 段 259
9.3.4 论域 260
9.3.2 类、接口及实现 260
9.3.3 谓词声明 260
9.3.5 子句 261
9.3.6 不确定性循环 261
9.3.7 Word格式化代码 261
9 4 程序设计语用学 262
9.4.1 常规技巧 262
9.4.2 布尔值 263
9.4.3 截断 263
9.4.4 红色截断和绿色截断 264
9.4.5 指派输入格式 265
9.4.6 异常和错误处理 266
9.4.7 内部错误和其他错误 266
9.5.2 运行堆栈 267
9.5.1 存储器 267
9.5 存储管理 267
9.5.3 尾部调用优化 268
9.5.4 运行栈耗尽 268
9.5.5 全局栈 268
9.5.6 G-堆栈耗尽 268
9.5.7 堆和垃圾回收 269
9.5.8 垃圾回收 269
9.5.9 Finalizers 270
9.5.10 数据在什么地方分配 270
9.5.11 堆中数据 270
9.5.12 多线程和存储 271
9.6 异常处理 271
9.6.1 如何捕获异常 271
9.6.2 如何构造自己的异常 273
9.6.3 如何继续另一个异常 274
本章小结 276
习题9 276
第3部分 语言参考 280
第10章 Visual Prolog语言元素 280
10.1 类型 280
10.2 对象系统 281
10.2.1 外部视图 281
10.2.2 内部视图 282
10.3 作用域和可视性 283
10.3.1 名字分类 283
10.3.2 可视性、隐蔽性及限定性 285
10.4.1 程序单元 286
10.4 词法结构 286
10.4.2 标记 287
10.4.3 文字 289
本章小结 291
习题10 291
第11章 Visual Prolog数据元素 292
11 1 论域段 292
11.1.1 类型名 292
11.1.2 复合论域 293
11 1 3 列表论域 295
11.1 4 引用论域 296
11 1 5 谓词论域 296
11 1 6 整型论域 301
11 1 7 实型论域 302
11 2 1 通用类型 303
11 2 通用类型和根类型 303
11 2 2 根类型 304
本章小结 304
习题11 304
第12章 Visual Prolog程序元素 305
12 1 项 305
12 1 1 项的基本概念 305
12 1 2 运算符 306
12 1 3 类成员访问 307
12 1 6 论域、算符和常量访问 308
12 2 1 常量段 308
12 2 常量 308
12 1 5 全局实体的访问 308
12 1 4 对象成员访问 308
12 2.2 常量定义 309
12 3 谓词 309
12 3.1 谓词段 309
12 3.2 构造段 310
12 3.3 接口谓词 311
12 3 4 变元 313
12 4 子句 313
12 4 1 子句段 313
12 4 2 目标段 314
12 5 事实 315
12 5 1 事实段 315
12 5 2 事实声明 315
12 5 4 事实 316
12 5 3 事实变量 316
12 6 评估 317
12 6 1 回溯 317
12 6.2 谓词调用 317
12.6.3 合一 318
12.6.4 引用论域 319
12.6.5 匹配 319
12.6.6 嵌套的函数调用 320
12.6.7 变量与常量 320
12.6.8 算术表达式 321
12.6.9 事实断言与撤销 322
12.6.10 失败谓词和成功谓词 322
12.6.11 逻辑与 322
12.6.12 逻辑或 322
12.6.14 截断 323
12.6.13 逻辑非 323
12.6.15 谓词finally/2 324
12 7 程序段 325
本章小结 325
习题12 326
第13章 编译单元 327
13.1 接口 327
13.1.1 接口的基本概念 327
13.1.2 接口与对象 328
13.1.3 开放限定 328
13.1.4 支持限定 329
13 2 类声明 330
13 3 类实现 332
13.3.1 类实现的基本概念 332
13.3.3 归结限定 334
13.3.2 继承限定 334
13.3.4 委托限定 337
13.3.5 This修饰 339
13.3.6 构造器 341
13.3.7 终结 344
13.4 类型转换 345
13.4.1 隐式转换 345
13.4.2 显式转换 346
13.5 条件编译 349
13 6 异常处理 349
13.7 预处理程序指令 350
13.7.1 条件编译指令 350
13.7.3 编译时间信息 351
13.7.2 源文件包含 351
本章小结 353
习题13 354
第14章 内部论域、谓词和常量 355
14.1 概述 355
14.2 内部常量详解 357
14.3 内部论域详解 358
14.4 内部谓词详解 363
本章小结 380
习题14 380
第15章 与其他编程语言接口 381
15.1 外部代码 381
15.2 关键问题 381
15.3 调用约定和链接名 382
15.4.1 举例 383
15.4 数据表示 383
15.4 2 外部链接库 384
15.5 存储管理 385
15.5.1 典型解决方案 385
15.5.2 垃圾收集和全局堆栈 386
15.6 Win32 API函数 386
本章小结 388
习题15 388
附录 术语表 389
A 389
B 390
C 391
D 394
E 396
F 397
G 398
H 399
I 399
K 401
L 401
M 402
N 403
O 404
P 405
R 407
S 408
T 411
U 412
V 413
参考文献 414