第一部分 PDC Prolog程序设计基础及基本编程技术 1
第一章 Prolog基础 1
1.1 逻辑程序设计 1
1.1.1 句子:事实和规则 2
1.1.2 询问 3
1.1.3 事实、规则和询问的综合应用实例 4
1.1.4 变量:一般的句子 6
1.1.5 阶段小结 6
1.2 从自然语言到Prolog程序 7
1.2.1 子句(事实和规则) 7
1.2.2 谓词(关系) 9
1.2.3 变量(一般子句) 10
1.2.4 目标(询问) 13
1.2.5 注释 15
1.2.6 什么是匹配 15
1.3 本章小结 16
1.4 练习一 18
第二章 PDC Prolog程序结构 19
2.1 PDC Prolog的基本程序段 19
2.1.1 子句段 19
2.1.2 谓词段 19
2.1.3 域段 21
2.1.4 目标段 24
2.2 说明和规则的进一步讨论 25
2.2.1 谓词说明中变元的类型化 26
2.2.2 同名不同元的谓词 27
2.2.3 规则语法 27
2.2.4 自动类型转换 28
2.3 其他程序段 29
2.3.1 数据库段 29
2.3.2 常量段 29
2.3.3 全局段 30
2.3.4 编译指令 30
2.4 本章小结 31
2.5 练习二 33
第三章 基本语言元素 35
3.1 名字 35
3.1.1 关键字 35
3.1.2 特殊处理谓词 35
3.2 程序段 36
3.2.1 域段 37
3.2.2 谓词段 39
3.2.3 数据库段 39
3.2.4 子句段 40
3.2.5 常量段 42
3.3 条件编译 43
3.4 在程序中包含文件 44
3.5 编译指令 44
3.5.1 bgidriver 44
3.5.2 bgifont 45
3.5.3 check_determ 45
3.5.4 code 45
3.5.5 config 45
3.5.6 diagnostics 46
3.5.7 errorlevel 46
3.5.8 heap 47
3.5.9 nobreak 47
3.5.10 nowarnings 47
3.5.11 printermenu 47
3.5.12 project 47
3.5.13 trace(shorttrace) 48
3.5.14 trail 49
3.6 本章小结 49
3.7 练习三 49
第四章 合一与回溯 50
4.1 合一 50
4.2 回溯 52
4.2.1 PDC Prolog求解的完全性 54
4.2.2 对回溯的详细考察 56
4.2.3 带有内部目标的回溯 59
4.3 控制求解的搜索过程 61
4.3.1 fail谓词 62
4.3.2 用cut谓词阻止回溯 63
4.3.3 not谓词 68
4.4 从过程观点看Prolog 72
4.5 本章小结 76
4.6 练习四 77
第五章 简单对象与复合对象 78
5.1 简单数据对象 78
5.1.1 作为数据对象的变量 78
5.1.2 作为数据对象的常量 78
5.2 复合数据对象和函子 79
5.3 复合对象的合一 80
5.4 将若干项视为单个项 81
5.4.1 使用函子的例子 82
5.4.2 使用复合对象的例子 82
5.5 声明复合对象域 85
5.5.1 域声明小结 87
5.5.2 多级复合对象 87
5.6 复合的混合域声明 88
5.6.1 多类型变元 89
5.6.2 表 89
5.7 复合对象的比较 90
5.8 本章小结 91
5.9 练习五 91
第六章 重复与递归 93
6.1 重复过程 93
6.1.1 关于回溯的回顾 93
6.1.2 事前与事后处理 94
6.2 用循环实现回溯 96
6.3 递归过程 97
6.3.1 计算机的执行机制 98
6.3.2 递归的优点 98
6.4 尾递归优化 98
6.4.1 使用尾递归 99
6.4.2 cut在递归中的妙用 101
6.5 将变元作为循环变量 103
6.6 递归数据结构 105
6.7 树数据类型 106
6.7.1 树的遍历 107
6.7.2 树的创建 109
6.8 二叉搜索树 110
6.9 本章小结 115
6.10 练习六 116
第七章 表与递归 118
7.1 什么是表 118
7.2 表声明、表头和表尾 118
7.3 表处理 120
7.4 表的使用 120
7.4.1 打印表 120
7.4.2 表元素的计数 121
7.5 尾递归之回顾 122
7.6 表的成员 125
7.7 表的合并:描述型及过程型编程 126
7.7.1 从过程的观点看递归 126
7.7.2 一个谓词的多种用途 127
7.8 一次找出所有的解 128
7.9 复合表 129
7.10 本章小结 133
7.11 练习七 134
第八章 算术与比较 136
8.1 算术表达式 136
8.2 操作 136
8.3 执行顺序 136
8.4 函数和谓词 137
8.5 随机数的产生 138
8.6 整数和实数运算 138
8.7 比较 139
8.7.1 相等性及相等谓词 139
8.7.2 字符、串与符号的比较 140
8.8 本章小结 141
8.9 练习八 141
第九章 串处理 143
9.1 串处理 143
9.2 基本串处理谓词 143
9.3 类型转换 146
9.4 本章小结 148
9.5 练习九 149
第十章 输入输出与文件系统 150
10.1 输入与输出 150
10.1.1 输出 150
10.1.2 输入 155
10.2 PDC Prolog的文件系统 156
10.3 打开及关闭文件 158
10.4 二进制块传送 160
10.5 标准I/O重定向 160
10.6 文件属性 160
10.6.1 打开及创建文件 161
10.6.2 OS/2和 DOS 4.0的特殊文件方式 161
10.7 文件操作 163
10.8 文件名及路径名 166
10.9 目录搜索 167
10.10 文件属性的操作 170
10.11 将数据库引入文件 171
10.12 将事实当作项来处理 172
10.13 本章小结 175
10.14 练习十 177
第十一章 内部数据库系统 178
11.1 使用内部数据库 178
11.2 声明内部数据库 178
11.3 修改内部数据库 179
11.3.1 运行期间加入事实 179
11.3.2 运行期间删除事实 180
11.3.3 一次删除几个事实 181
11.3.4 从文件中读取新事实 181
11.3.5 保存事实数据库 182
11.3.6 例子 182
11.4 本章小结 185
11.5 练习十一 185
第十二章 外部数据库系统 187
12.1 PDC Prolog的外部数据库 187
12.2 外部数据库的构成 187
12.2.1 命名约定 188
12.2.2 外部数据库选择符 188
12.3 链 189
12.4 外部数据库域和数据库引用号 190
12.5 外部数据库操作 191
12.6 链的操作 192
12.7 项的操作 192
12.8 一个完整的例子 192
12.9 B+树 195
12.9.1 页,阶及关键字长 196
12.9.2 重复关键字 196
12.9.3 多次扫描 196
12.9.4 B+树标准谓词 196
12.9.5 例子:通过B+树存取数据库 197
12.10 外部数据库程序设计 199
12.10.1 扫描数据库 199
12.10.2 显示数据库的内容 200
12.10.3 数据库安全保护 201
12.10.4 更改数据库 202
12.10.5 使用内部B+树指针 205
12.10.6 改变数据库结构 206
12.11 文件共享和外部数据库 208
12.11.1 文件共享域 208
12.11.2 以共享方式打开数据库 209
12.11.3 事务处理与文件共享 209
12.11.4 文件共享谓词 210
12.11.5 文件共享程序设计 211
12.11.6 实现高层封锁 212
12.11.7 一个完整的文件共享例子 212
12.11.8 PDC Prolog文件共享的实现 217
12.12 外部数据库的二进制数据处理 217
12.13 其他谓词 218
12.14 本章小结 218
12.15 练习十二 218
第十三章 窗口程序设计 219
13.1 基本窗口处理 219
13.1.1 设置屏幕显示属性 219
13.1.2一个猜单词游戏 223
13.2 高级窗口处理 225
13.3 基于屏幕的输入输出 226
13.4 一个简单游戏例子 227
13.5 在程序中使用编辑器与目录 230
13.6 本章小结 232
13.7 练习十三 232
第十四章 Borland图形接口 233
14.1 什么是BGI 233
14.2 视频模式简述 233
14.3 视区和BGI.PRE文件 234
14.4 运行BGI演示程序 235
14.5 初始化和关闭BGI系统 235
14.6 当前位置 239
14.7 画图和着色 239
14.7.1 线段 239
14.7.2 画圆 240
14.7.3 矩形、多边形和直方图 241
14.7.4 填充 241
14.8 颜色控制 242
14.8.1 调色板 242
14.8.2 CGA上的颜色控制 243
14.8.3 EGA上的颜色控制 244
14.8.4 RGB显示器的颜色控制 245
14.8.5 有关颜色控制的谓词 245
14.9 在图形模式下输出文本 245
14.9.1 字模 246
14.9.2 在图形模式下输出文本的BGI谓词 246
14.10 屏幕和视区 248
14.11 像素和映像操作 249
14.12 使用带RGB图形卡的BGI 249
14.13 在应用程序中使用BGI 250
14.13.1 图形驱动程序和字模 250
14.13.2 在运行时刻装入驱动程序的例子 251
14.13.3 建立与运行独立的BGI可执行文件 252
14.14 本章小结 252
14.15 练习十四 252
第十五章 跟踪与调试 253
15.1 语法及类型检查 253
15.2 跟踪 255
15.2.1 trace指令 255
15.2.2 以优化方式进行跟踪:shorttrace 256
15.2.3 跟踪特定谓词 257
15.2.4 保存跟踪信息 258
15.2.5 谓词trace 258
15.2.6 交互式跟踪控制 259
15.2.7 跟踪方式下一些特殊处理的谓词 260
15.2.8 一个跟踪实例 260
15.3 用于调试的编译指令 260
15.4 运行时刻错误报告 263
15.5 菜单上的编译器选项 264
15.6 本章小结 264
15.7 练习十五 264
第十六章 错误与异常处理 265
16.1 异常处理和错误俘获 265
16.2 项读入程序的错误处理 266
16.3 中止控制 268
16.4 改进的.EXE文件错误控制 269
16.5 本章小结 270
16.6 练习十六 270
第二部分 PDC Prolog高级程序设计技术 271
第十七章 高级程序设计技术 271
17.1 流分析及其控制 271
17.2 指针域 273
17.2.1 声明指针域 273
17.2.2 指针域和尾数组 273
17.2.3 指针域的使用 274
17.2.4 例子 274
17.3 动态截断 275
17.3.1 关于动态截断的例子 275
17.3.2 用指针域实现二叉树 276
17.3.3 利用指针域排序 277
17.4 程序设计风格 278
17.4.1 提高程序设计效率的原则 278
17.4.2 使用谓词fail 280
17.4.3 确定性与非确定性:设置cut 281
17.5 PDC Prolog的内存管理 281
17.5.1 释放空闲的内存资源 282
17.5.2 控制内存分配 282
17.6 生成可执行的独立程序 283
17.7 模块化程序设计 283
17.7.1 工程 283
17.7.2 全局声明 284
17.7.3 编译和连接模块 285
17.7.4 例子 286
第十八章 与其他语言的接口 288
18.1 从PDC Prolog中调用其他语言 288
18.1.1 准备工作 288
18.1.2 命名约定 289
18.1.3 从PDC Prolog中调用C过程 290
18.1.4 Turbo C编译器选项和连接 290
18.1.5 从PDC Prolog中调用汇编例程 293
18.2 从其他语言调用PDC Prolog 296
18.2.1 动态存储分配 298
18.2.2 向其他语言传递复合对象 298
第十九章 消息管道 304
19.1 消息管道的工作原理 304
19.2 服务程序和客户程序 305
19.3 出错条件和出错处理 307
19.4 终止连接 309
19.5 高级谓词 309
19.6 一个简单的远程外壳例子 312
第二十章 操作系统级程序设计 316
20.1 访问操作系统 316
20.2 定时服务 320
20.3 位级操作 322
20.4 访问硬件的低级支持 324
20.5 本章小结 327
第三部分 PDC Prolog程序设计实例 328
第二十一章 Prolog程序实例 328
21.1 建造一个小型的专家系统 328
21.2 原型开发:一个简单的路径问题 332
21.3 危险洞穴探险 334
21.4 硬件仿真 335
21.5 Hanoi塔 337
21.6 单词的音节划分 338
21.7 N皇后问题 341
21.8 键盘的使用 343
21.8.1 读入与识别键 344
21.8.2 一个简单的域编辑器 345
21.8.3 使用inkey谓词 346
第四部分 PDC Prolog程序设计环境 347
第二十二章 PDC Prolog的安装与启动 347
22.1 安装程序的功能 347
22.2 PDC Prolog系统的安装 348
22.2.1 安装到硬盘上 348
22.2.2 安装到软盘上 348
22.2.3 修改操作系统环境 348
22.3 缺省的键盘布局 349
22.4 启动PDC Prolog 349
22.5 菜单与热键 350
22.5.1 主菜单 350
22.5.2 下拉菜单 350
22.5.3 热键与命令键 350
22.6 PDC Prolog的窗口 352
22.6.1 Edit窗口 352
22.6.2 Dialog窗口 352
22.6.3 Message窗口 352
22.6.4 Trace窗口 352
22.7 编辑器简介 353
22.7.1 在Edit窗口中移动光标 353
22.7.2 删除文本 353
22.7.3 文本块处理 354
22.8 一个示教PDC Prolog程序 354
22.8.1 在编辑器中输入程序 354
22.8.2 运行程序 356
22.8.3 语法出错 356
22.8.4 将程序存盘 356
22.8.5 查看磁盘文件 357
22.8.6 跟踪程序 357
22.8.7 创建独立的程序 358
第二十三章 PDC Prolog编辑器 359
23.1 进入与退出编辑器 359
23.2 系统编辑器与库编辑器 359
23.3 编辑窗口状态行 359
23.4 编辑器命令 360
23.4.1 光标移动命令 362
23.4.2 插入和删除命令 363
23.4.3 查找和替换命令 363
23.4.4 块操作命令 364
23.4.5 特殊的块操作功能 366
23.4.6 文件处理命令 366
23.4.7 应用程序键 367
23.4.8 其他命令 367
23.4.9 全局命令 368
23.4.10 设计自己的编辑器功能 368
23.5 PDC Prolog编辑器与Wordstar 368
第二十四章 PDC Prolog菜单命令详解 369
24.1 系统配置 369
24.2 PDC Prolog的菜单结构 369
24.2.1 选择菜单项 369
24.2.2 主菜单项概述 371
24.2.3 热键 371
24.3 系统窗口 372
24.3.1 编辑窗口 372
24.3.2 跟踪窗口 373
24.3.3 信息窗口 373
24.3.4 对话窗口 375
24.3.5 帮助行 375
24.4 编辑器 376
24.4.1 在编辑窗口中工作 376
24.4.2 辅助编辑器 379
24.5 菜单和命令 379
24.5.1 Files菜单 380
24.5.2 Edit命令 381
24.5.3 Run命令 382
24.5.4 Compile菜单 382
24.5.5 Options菜单 384
24.5.6 Setup菜单 387
24.6 启动PDC Prolog 393
24.7 命令行用法 393
第二十五章 标准谓词详解 396
第五部分 附录 571
附录A 与Turbo Prolog的差别 571
A.1 对Turbo Prolog的改进与提高 571
A.1.1 OS/2版本 571
A.1.2 外部数据库系统中的网络支持 571
A.1.3 内部进程通信 571
A.1.4 重设计的编辑器 571
A.1.5 可扩充的编辑器 571
A.1.6 匹配文件名的新谓词 572
A.1.7 读写二进制文件 572
A.1.8 从查找路径中定位文件 572
A.1.9 目录的删除与创建 572
A.1.10 文件拷贝谓词 572
A.1.11 扩充的文件打开谓词 572
A.1.12 文件名处理 572
A.1.13 改进的串处理 572
A.1.14 进程 572
A.1.15 返回周的序号 572
A.1.16 返回启动路径和程序名 573
A.1.17 有关运行时错误的信息 573
A.1.18 返回可用的EMS数量 573
A.1.19 改进的窗口控制 573
A.1.20 命令行编译器 573
A.1.21 C语言程序可为主程序 573
A.1.22 用Microsoft C连接C 573
A.1.23 包含目录 573
A.1.24 Verbosity选项 573
A.1.25 Comline的参数 573
A.1.26 保存选择文件 573
A.1.27 回车字符 574
A.1.28 增加的重置大小/移动键 574
A.1.29 带重复的B+树 574
A.1.30 允许多重打开索引的更新 574
A.1.31 创建B+树选择符的新拷贝 574
A.1.32 处理外部数据库中的二进制信息 574
A.1.33 在REF和串间的转换 574
A.1.34 对配置的改进控制 574
A.2 不兼容性 575
A.2.1 新的配置文件 575
A.2.2 外部数据库系统的新的二进制格式 575
A.2.3 不兼容的.SYM文件 575
A.2.4 errormsg略去五个字符 575
A.2.5 field_str不接受换行 575
A.2.6 删除旧的图形 575
A.2.7 editmsg/8被改名成edit/8 575
附录B 错误信息 576
B.1 错误信息 576
B.2 运行期间错误 587
B.3 输入/输出及操作系统错误 589
B.4 屏幕和窗口错误 590
B.5 数据库错误 591
B.6 项读入程序 593
B.7 编辑器错误 593
B.8 串处理错误 594
B.9 Borland图形接口(BGI) 594
B.10 消息、 595
B.11 目录浏览器 595
B.12 装入配置文件 595
B.13 操作系统错误 595
附录C 标准谓词索引 597
参考文献 601