第一部分 Visual Prolog概述 2
第1章Visual Prolog开发环境 2
1.1为阅读本书需要安装什么 2
1.2启动Visual Prolog可视化开发环境 2
1.3创建和运行Test Goal项目举例 3
1.4打开编辑器窗口 5
1.5运行和测试程序 5
1.6语言教程测试用例 6
1.6.1在Test Goal中测试例子 6
1.6.2测试用例作为单独可执行程序 6
1.7处理错误 7
第二部分 学习Visual Prolog 10
第2章Prolog基本原理 10
2.1逻辑程序设计 10
2.1.1句子:事实和规则 11
2.1.2询问 12
2.1.3变量:一般语句 14
2.1.4小结 15
2.2从自然语言到Prolog程序 15
2.2.1子句(事实和规则) 15
2.2.2谓词(关系) 18
2.2.3变量(一般子句) 18
2.2.4目标(询问) 21
2.2.5注释 23
2.3什么是匹配 23
2.4小结 24
第3章 Visual Prolog程序结构 26
3.1基本程序段 26
3.1.1子句段 26
3.1.2谓词段 27
3.1.3论域段 29
3.1.4目标段 31
3.2细看声明和规则 31
3.2.1声明谓词参数论域 34
3.2.2多元谓词 36
3.2.3规则语法 36
3.2.4自动类型转换 37
3.3其他程序段 38
3.3.1事实段 38
3.3.2常量段 38
3.3.3全局段 39
3.3.4编译程序命令 39
3.4小结 40
第4章 合一与回溯 42
4.1与事件匹配:合一 42
4.2回溯 44
4.2.1 Visual Prolog的盲目搜索求解 46
4.2.2搜索求解控制 54
4.2.3使用fail谓词 54
4.2.4阻止回溯:截断 55
4.3.1规则和事实如同过程 63
4.3从过程观点看Prolog 63
4.3.2规则与Case语句 64
4.3.3在规则内部执行测试 64
4.3.4截断与GoTo语句 65
4.3.5返回计算值 66
4.4小结 67
第5章 简单对象与复合对象 69
5.1简单数据对象 69
5.1.1变量作为数据对象 69
5.1.2常量作为数据对象 69
5.2复合数据对象与算符 71
5.2.1复合对象的合一 72
5.2.2将几项作一项处理 73
5.2.3声明复合对象论域 76
5.2.4复合型混合论域声明 80
5.3小结 81
6.1.1再论回溯 83
第6章 重复与递归 83
6.1.2用循环实现回溯 86
6.1.3递归程序 87
6.1.4尾部递归优化 88
6.1重复过程 93
6.1.5用参数作循环变量 93
6.2递归数据结构 96
6.2.1树作为数据类型 97
6.2.2二叉搜索树 101
6.3小结 107
第7章 表与递归 108
7.1什么是表 108
7.1.1声明表 108
7.2表处理 109
7.3使用表 110
7.3.1输出表 110
7.3.2表元素计数 111
7.3.3再论尾部递归 113
7.3.4表成员 115
7.3.5表合并 116
7.4同时找到所有解 118
7.5复合表 119
7.6小结 124
第8章 内部事实数据库 126
8.1声明事实数据库 126
8.2使用事实数据库 127
8.2.1访问事实数据库 127
8.2.2更新事实数据库 128
8.2.3确定事实属性的关键字 132
8.3举例 134
8.4小结 137
9.1算术表达式 139
9.1.1运算 139
第9章 算术与比较运算 139
9.1.2求值顺序 140
9.2函数和谓词 140
9.2.1产生随机数 141
9.2.2整型和实型算术运算 142
9.3比较运算 145
9.3.1等价谓词 145
9.3.2比较字符、字符串和符号 148
第10章 高级技术 149
10.1流程分析 149
10.1.1谓词的流程模式 151
10.1.2控制流程分析 151
10.1.3引用变量 152
10.1.4声明引用论域 153
10.1.5引用论域与跟踪矩阵 154
10.1.6使用引用论域 154
10.1.7再谈流程模式 155
10.1.8使用带有引用论域的二叉树 156
10.1.9使用引用论域排序 157
10.2函数和返回值 158
10.3确定性管理机制 160
10.4谓词作为参数 164
10.4.1谓词值 164
10.4.2谓词论域 165
10.5二进制论域 170
10.5.3创建二进制项 171
10.5.1二进制项的实现 171
10.5.2二进制项正文语法 171
10.5.4访问二进制项 172
10.5.5合一二进制项 172
10.5.6举例 173
10.5.7转换二进制项 174
10.6模块化程序设计 175
10.6.1全局声明 175
10.7错误和异常处理 180
10.6.2项目 180
10.7.1异常处理和错误陷阱 181
10.7.2错误报告 183
10.7.3处理读项错误 184
10.8中断控制 185
10.8.1中断和信号检查 186
10.8.2关键错误处理 190
10.9动态截断 191
10.10自由类型转换 193
10.11程序设计风格 193
10.11.1有效的编程规则 193
10.11.2使用fail谓词 195
10.11.3确定性与不确定性:设置截断 196
第11章 类与对象 197
11.1对象机制 197
11.2.1类声明 198
11.2 Visual Prolog的类 198
11.2.2类实现 199
11.3类实例——对象 199
11.4类论域 201
11.5派生类及继承 202
11.6虚谓词 204
11.7静态事实和谓词 205
11.8引用对象自身(谓词this) 206
11.9类的作用范围 207
11.10自定义构造函数和析构函数 209
11.11抽象类 210
11.12保护性谓词、论域和事实 212
11.13派生类的访问控制 212
11.14对象谓词值 213
11.15类的形式语法 219
12.1.1写谓词 222
12.1写谓词与读谓词 222
第12章 文件操作谓词 222
第三部分 使用Visual Prolog 222
12.1.2读谓词 228
12.1.3二进制块传送 230
12.2文件系统管理 231
12.2.1打开和关闭文件 232
12.2.2重定向标准I/O 235
12.2.3文件操作 235
12.2.4文件属性 239
12.3文件名和通路名 241
12.4目录搜索 243
12.5操纵文件属性 246
12.6处理文本文件中的项 247
12.7文件操作谓词小结 249
第13章 字符串处理谓词 252
13.1基本串处理谓词 252
13.2类型转换谓词 256
13.3程序举例 258
13.4串处理谓词小结 260
第14章 外部数据库系统 261
14.1外部数据库结构 261
14.1.1外部数据库组成 261
14.1.2链结构 263
14.1.3外部数据库论域 264
14.1.4外部数据库谓词 265
14.1.5链操作谓词 269
14.1.6项操作谓词 270
14.1.7程序举例 271
14.2B+树 274
14.2.1页、阶和键长 274
14.2.2重复键 274
14.2.3多趟扫描 275
14.2.4B+树标准谓词 275
14.2.5经由B+树访问数据库举例 277
14.3.1扫描数据库 279
14.3外部数据库编程 279
14.3.2显示数据库内容 280
14.3.3实现数据库安全 282
14.3.4更新数据库 283
14.3.5使用内部B+树指针 286
14.3.6改变数据库结构 287
14.3.7共享文件和外部数据库 289
14.3.8文件共享论域 290
14.3.9以共享方式打开数据库 290
14.3.10文件共享编程 292
14.3.11实现高级加锁 294
14.3.12文件共享举例 295
14.3.13文件共享实现 300
14.4杂务谓词 300
14.5小结 301
15.1访问操作系统 302
第15章 系统级编程 302
15.2时间服务 304
15.3位级操作 307
15.4访问硬件:低级支持 309
15.5小结 311
第16章 Prolog程序举例 313
16.1构建一个小型专家系统 313
16.2路由问题原型设计 317
16.3危险洞穴历险 318
16.4硬件仿真 320
16.5 Hanoi塔 321
16.6划分单词为音节 323
16.7 N个皇后问题 325
第四部分 程序员指南 330
第17章 语言元素 330
17.1命名 330
17.1.1关键字 330
17.2程序段 331
17.1.2特殊处理谓词 331
17.2.1论域段 332
17.2.2谓词段 337
17.2.3事实段 340
17.2.4子句段 341
17.2.5目标段 345
17.2.6常量段 345
17.3在程序中使用包含文件 347
17.2.7条件编译 347
17.4模块和全局编程结构 348
17.4.1编译单元 348
17.4.2全局作用范围的名字 348
17.4.3多模块程序的包含结构 349
17.4.4公共类成员限制规则 350
17.4.5多模块项目编译选项 351
17.5编译程序命令 352
17.6 Visual Prolog存储管理 355
17.6.1存储区限制 356
17.6.2释放多余的内存资源 357
第18章 与其他语言的接口 358
18.1使用动态连接库 358
18.2从Visual Prolog调用其他语言 358
18.2.1声明外部谓词 358
18.2.2调用约定和参数传递 359
18.3.1简单论域 362
18.3.2复杂论域 362
18.3论域的实现 362
18.4存储器考虑 364
18.4.1内存对齐方式 364
18.4.2存储分配 365
18.5举例 368
18.5.1表处理 368
18.5.2从其他语言调用Prolog 370
18.5.3从Visual Prolog调用汇编例程 372
附录A 谓词索引(按功能分类) 375
附录B 谓词索引(按字母顺序) 378