《人工智能语言》PDF提取 ⇩

第一部分Quintus Prolog用户指南1

第一章Prolog入门3

1.1什么是逻辑程序设计3

1.1.1 Hron子句3

1.1.2 谓词4

1.1.3 Prolog4

1.1.4 合一5

1.2Prolog系统7

1.2.1 向Prolog中输入信息7

1.2.2 询问Prolog7

1.2.3 例子8

1.2.4 退出Prolog9

第二章Quintus Prolog的使用10

2.1不在Emacs下使用Prolog10

2.1.1 进入Prolog10

2.1.2 退出Prolog10

2.2在Emacs下使用Prolog10

2.2.1 终端和操作系统需求11

2.2.2 使用Prolog和Emacs11

2.2.3 退出Emacs12

2.2.4 挂起Emacs对话进程12

2.3Prolog顶层提示符12

2.3.1 返回Prolog顶层提示符13

2.4联机帮助系统的使用13

2.4.1 使用Emacs访问联机手册13

2.4.2 不在Emacs下访问联机手册13

2.4.3 查看交叉参考14

2.4.4 查看指定主题的信息14

第三章Emacs编辑器的使用15

3.1 建立文件15

3.2 装入文件15

3.3 保存文件15

3.4 移动光标16

3.5 插入正文16

3.6 删除正文17

3.7 移动正文17

3.8 拷贝正文17

3.9搜索正文18

3.9.1 改正搜索串的输入错误18

3.9.2 反向搜索一文件18

3.10 字符串的选择性替换18

3.11同时编辑多个文件19

3.11.1 装入多个文件19

3.11.2 改变显示缓冲区19

3.11.3 分割窗口20

3.11.4 在窗口间移动光标20

3.11.5 扩大当前窗口20

3.11.6 删除一正文窗20

3.11.7 恢复到只有一个编辑窗20

3.11.8 当前被编辑文件的列表20

3.12 Emacs帮助设施的使用21

第四章程序的装入22

4.1 在Prolog中装入文件22

4.2使用Emacs界面的程序咨询22

4.2.1 装入整个缓存23

4.2.2 装入缓存中一个区域23

4.2.3 单个过程的装入23

4.2.4 正文窗口和Prolog窗口之间的切换23

4.3 不用Emacs的程序咨询23

4.4 嵌入型命令consult/1的使用24

4.5 通过Emacs界面的程序编译25

4.6 不用Emacs的程序编译25

4.7 嵌入型命令compile/1的使用26

4.8 过程的直接定义26

4.9 语法出错信息27

4.10 风格警告信息27

4.11程序状态的保存和恢复29

4.11.1 在操作系统层恢复保存的状态30

4.11.2 使用Emacs恢复保存状态30

4.11.3 恢复保存状态及其源文件30

4.11.4 在Prolog中恢复保存状态30

4.12 Prolog窗口中内容的保存30

4.13 初启文件的使用30

第五章程序的运行32

5.1 提问32

5.2 求一目标的所有解33

5.3 使用Emacs重复询问34

5.4 使用Emacs显示以前的输入34

5.5 使用Emacs对过程定位34

5.6 打断程序的执行35

5.7 内部谓词的出错信息36

5.8 未定义谓词36

5.9 在Emacs下重启Prolog36

5.10 在Prolog中执行UNIX命令37

5.11 动态谓词的生成37

5.12 提示符39

第六章程序格式40

6.1 标准格式40

6.2 析取式和条件41

第七章Prolog程序的调试43

7.1 背景信息43

7.2 启动调试程序43

7.3 退出调试程序44

7.4 调试编译过程44

7.5 跟踪过程运行的每一步45

7.6选择过程进行调试46

7.6.1 设置监视点46

7.7 改变调试的详细程序47

7.8 改变提示的频繁度47

7.9 询问调试程序和调试点的状态48

7.10 调试信息的格式48

7.11调试例子49

7.11.1 利用系统警告信息51

7.11.2 单步跟踪程序的执行52

7.11.3 利用跳跃和再试选择项53

7.11.4 利用监视点55

7.12调试过程选择项55

7.12.1 基本选择项56

7.13 在执行期间重定义过程57

附录A启动Prolog系统58

A.1 运行Prolog系统58

A.2 运行保存状态58

附录B其他程序到Quintus Prolog的移植59

B.1 浮点数59

B.2 编译器/解释器的接口59

B.3 风格检查59

B.4 其他的不兼容性60

B.5 废弃的内部谓词60

B.6 新谓词60

B.7 运行移植检查程序62

附录CEMACS概要64

C.1 主要键64

C.2 光标移动64

C.3 插入与删除64

C.4 全局替换65

C.5 在缓冲区中向上和向下移65

C.6 窗口处理65

C.7 文件和缓冲区处理65

C.8 与Prolog相关的命令65

C.9 仅在Prolog窗口中有效的键66

附录D 特需和限制67

附录E 术语表68

第二部分Quintus Prolog参考手册77

第一章语法79

1.179

1.1.1 整数79

1.1.2 浮点数79

1.1.3 原子79

1.1.4 变量79

1.2复合项80

1.2.1 表80

1.3 字符扩展81

1.4操作符83

1.4.1 操作符类型84

1.5处理操作符的内部谓词86

1.5.1 op(+Precedence,+Type,+Name)86

1.5.2 current_op(? Precedence,? Type,? Op)86

1.6 语法限制86

1.7 注释87

1.8形式语法87

1.8.1 记号88

1.8.2 句子88

1.8.3 项89

1.8.4 词法单位90

1.8.5 记号92

第二章语义93

2.1程序93

2.1.1 谓词说明94

2.2 析取95

2.3 说明性和过程性语义96

2.4 Cut97

2.5 出现检查98

第三章程序的装入99

3.1咨询和编译99

3.1.1consult(+File)99

3.1.2compile(+File)100

3.1.3 ensure_loaded(+FileSpec)101

3.2使用模块系统装入程序101

3.2.1 模块文件101

3.2.2模块说明102

3.2.3use_module(+FileSpecList)102

3.2.4use_module(+FileSpec,+ImportList)102

3.2.5 module(+ModuleName)103

3.3风格检查103

3.3.1style_check(+X)103

3.3.2 no_style_check(+X)103

3.4 程序执行期间重定义过程103

3.5多文件谓词子句定义104

3.5.1 多文件说明104

3.6库中文件查找104

3.6.1 library_directory(? DirSpec)105

第四章控制106

4.1+P,+Q106

4.2 +P;+Q106

4.3!106

4.4call(+X)106

4.5\++P106

4.6+P→+Q;+R106

4.7 +P→+Q107

4.8 true107

4.9 otherwise107

4.10 fail107

4.11 false107

4.12 repeat108

第五章输入输出109

5.1项的输入输出109

5.1.1 read(-X)109

5.1.2 write(? X)109

5.1.3 writeq(? X)110

5.1.4 write_canonical(? Term)110

5.1.5 display(? X)110

5.1.6print(? X)111

5.1.7portray_clause(+Clause)111

5.1.8 format(+Control,+Arguments)111

5.2字符的输入输出116

5.2.1 get0(-N)116

5.2.2get(-N)116

5.2.3skip(+N)116

5.2.4 put(+N)116

5.2.5nl117

5.2.6 tab(+N)117

5.3流和文件处理117

5.3.1 流和文件名117

5.3.2 文件说明117

5.3.3流对象117

5.3.4 open(+File,+Mode,-Steram)117

5.3.5open_null_stream(-Steram)118

5.3.6 close(+X)118

5.3.7 current_stream(? File,? Mode,? Steram)118

5.3.8 nofileerrors119

5.3.9fileerrors119

5.3.10flush_output(+Steram)119

5.3.11set_input(+Steram)119

5.3.12 Set_output(+Steram)119

5.3.13 current_input(-Steram)119

5.3.14 current_output(-Steram)120

5.3.15 absolute_file_name(RelFileSpec,-AbsFileSpec)120

5.3.16 source_file(-FileSpec)120

5.3.17 source_file(? PredSpec,? FileSpec)120

5.4用指定流输入输出120

5.4.1 基于流的项输入输出120

5.4.2 基于流的字符输入输出121

5.5读取打开流的状态121

5.5.1character_count(+Stream,-N)122

5.5.2line_count(+Stream,-N)122

5.5.3 line_position(+Stream,-N)122

5.5.4终端I/O的流位置信息122

5.5.5 stream_position(+Stream,-Old,+New)123

5.5.6 stream_position(? Stream,? Pos)123

5.6和DEC-10 Prolog兼容的文件处理123

5.6.1 See(+S)123

5.6.2 seeing(-S)124

5.6.3seen124

5.6.4 tell(+S)125

5.6.5 telling(-S)125

5.6.6 told126

5.7和DEC-10 Prolog兼容的终端字符输入/输出126

5.7.1 ttyget0(-N)126

5.7.2ttyget(-N)126

5.7.3ttyskip(+N)126

5.7.4 ttyput(+N)126

5.7.5ttyni126

5.7.6 ttytab(+N)126

5.7.7 ttyfiush127

第六章算术运算128

6.1算术表达式128

6.2 -X is+Expression129

6.3算术比较129

6.3.1+X=:=+Y129

6.3.2+X=\=+Y129

6.3.3+X<+Y130

6.3.4+X>+Y130

6.3.5+X=<+Y130

6.3.6 +X>=+Y130

第七章查看项131

7.1 var(? X)131

7.2 nonvar(? X)131

7.3 atom(? X)131

7.4 integer(? X)131

7.5 float(? X)132

7.6 number(? X)132

7.7 atomic(? X)132

7.8functor(? Term,? Name,? Arity)132

7.9 arg(+ArgNum,+Term,-Arg)133

7.10 ? Pred=..? List)133

7.11常量和正文之间的转换133

7.11.1 atom_chars(? Atom,? Chars)134

7.11.2 number_chars(? Number,? Chars)134

7.11.3 name(? Constant,? Chars)135

7.12numbervars(? Term,+FirstVar,-LastVar)136

7.13 copy_term(+Term,-Copy)136

第八章比较项138

8.1 项的标准序138

8.2 ? T1==? T2138

8.3 ? T1\==? T2138

8.4 ? T1@<IV T2138

8.5 ? T1@>IV T2139

8.6 ? T1@=<IV T2139

8.7 ? T1@>=IV T2139

8.8compare(? Op,? T1,? T2)139

8.9sort(+L1,-L2)139

8.10 keysort(+L1,-L2)140

第九章查看程序状态141

9.1listing141

9.2 listing(+Predicate)141

9.3 current_atom(? Atom)141

9.4 current_predicate(? Name,? Term)141

9.5 predicate_property(? PredSpec,? PredProperty)142

第十章修改执行状态143

10.1 Control-c中断143

10.2 halt143

10.3 break143

10.4 abort144

10.5 ancestors(-Goals)144

10.6subgoal_of(? S)144

10.7 maxdepth(+D)144

10.8 depth(-D)145

第十一章调试146

11.1 出错条件146

11.2 过程框控制流模型146

11.3调试概念147

11.3.1 跟踪模式和调试模式147

11.3.2 穷尽跟踪147

11.3.3 有选择调试147

11.3.4 束缚148

11.3.5 选择调试端口选择项148

11.3.6 小结148

11.4 调试信息的格式148

11.5调试选择项149

11.5.1 基本控制选择项150

11.5.2 打印选择项150

11.5.3 高级控制选择项151

11.5.4 环境选择项151

11.5.5 求助选择项152

11.5.6 调试编译的过程152

11.6用于调试的内部谓词153

11.6.1 debueg153

11.6.2 trace153

11.6.3 nodebug153

11.6.4 notrace153

11.6.5debugging153

11.6.6spy(+X)154

11.6.7 nospy(+X)154

11.6.8nospyall154

11.6.9unknown(-OldAction,+NewAction)154

11.6.10 leash(+Mode)155

第十二章模块156

12.1 引言156

12.2 基本概念156

12.3 定义模块156

12.4 将非模块化文件转换成模块化文件157

12.5 装入模块157

12.6 可见性法则158

12.7 源模块158

12.8 键入模块159

12.9 动态创建模块159

12.10 模块代码的调试160

12.11 在编辑接口下装入模块160

12.12 名冲突161

12.13当前模块161

12.13.1 current_module(Mod)161

12.13.2 current_module(Module,File)161

12.14获得装入模块的信息162

12.14.1 模块定义的谓词162

12.14.2 模块可见的谓词162

12.15 移入动态/解释谓词162

12.16 模块名扩充163

12.17 元谓词说明164

第十三章修改数据库166

13.1 动态和静态过程166

13.2插入谓词167

13.2.1assert(+Clause)167

13.2.2asserta(+Clause)167

13.2.3 assertz(+Clause)167

13.2.4 例子168

13.3删除谓词168

13.3.1 retract(+Clause)169

13.3.2retract/1使用的重要问题169

13.3.3retractall(+Head)170

13.3.4abolish(+Predicates)171

13.3.5 abolish(+Name,+Arity)172

13.4 clause(+Head,?Body)172

第十四章数据库引用174

14.1定义174

14.2assert(+Clause,-Ref)174

14.3asserta(+Clause,-Ref)174

14.4 assertz(+Clause,-Ref)174

14.5clause(?Head,?Body,?Ref)174

14.6erase(+Ref)174

14.7 instance(+Ref,-Term)175

第十五章内部数据库176

15.1recorda(+Key,?Term,-Ref)176

15.2 recordz(+Key,?Term,-Ref)176

15.3 recorded(?Key,?Term,?Ref)176

15.4 current_key(?KeyName,?KeyTerm)177

第十六章集合:收集目标的全解179

16.1setof(?Template,+Goal,-Set)179

16.2 Bagof(?Template,+Goal,-Bag)180

16.3 x^p180

第十七章语法规则181

17.1 确定子句文法181

17.2 例子181

17.3 把语法规则转换成Prolog子句182

17.4与语法有关的内部谓词183

17.4.1expand_term(+T1,-T2)183

17.4.2phrase(+Phrase,?List,?Rest)183

17.4.3 phrase(+Phrase,?List)184

17.4.4 'c'(?S1,?Terminal,?S2)184

第十八章其他内部谓词185

18.1 ?X=?Y185

18.2length(?L,?N)185

18.3 prolog_flag(+FlagName,-OldValue,+NewValue)186

18.4prolog_flag(?FlagName,?Value)187

18.5 prompt(-Old,+New)187

附录A编写高效程序188

A.1 条件和析取188

A.2Cut188

A.2.1 保证过程确定性189

A.2.2 Cut的放置190

A.2.3 终止回溯循环190

A.3 项的构造和分解191

A.4索引193

A.4.1 数据表193

A.4.2 确定性检测194

A.5 尾子句确定性检测194

A.6 尾递归优化195

附录B:内部运算符196

第三部分Quintus Prolog系统依赖特性手册197

第一章联机求助199

1.1求助文件199

1.1.1 菜单文件199

1.1.2 正文文件199

1.2help200

1.3 help(+Topic)200

1.4manual200

1.5 manual(+X)200

1.6使用求助系统的Emacs命令201

1.6.1 菜单命令201

1.6.2 正文命令201

第二章访问UNIX202

2.1在Prolog中执行UNIX命令202

2.1.1 unix(cd(+Path))202

2.1.2unix(cd)202

2.1.3unix(shell(+Command))202

2.1.4 unix(system(+Command))202

2.1.5 unix(shell)202

2.1.6 unix(argv(-Args))203

2.2在库表中搜索文件203

2.3 absolute_file_name(+RelFileSpec,-AbsFileSepc)204

2.4中断处理和控制流205

2.4.1 在C语言中改变Prolog的控制流205

2.4.2 用户定义的中断处理205

2.4.3 临界区207

第三章保存程序状态208

3.1save_program(+File)208

3.2save(+File)208

3.3save(+Fiie,-Return)208

3.4 restore(+File)209

3.5 reinitialise209

第四章EMACS接口210

4.1 概述210

4.2 组合键210

4.3 Prolog模式211

4.4 Prolog源代码风格限制212

4.5 在初始化文件中重定义键212

4.6Prolog/Emacs接口程序设计213

4.6.1 从Emacs提交Prolog询问213

4.6.2 从Prolog中激活MockLisp函数214

4.6.3 例子215

第五章UNIX下的外部函数接口217

5.1 概述217

5.2装入外部文件到Prolog中217

5.2.1 load_foreign_files(+ListOfFiles,+ListOfLibraries)217

5.2.2 UNIX 4.2BSD下的“ld”命令格式218

5.2.3 UNIX System V下的“ld”命令格式218

5.3 外部函数和Prolog过程的连接219

5.4指定参数传递接口220

5.4.1 foreign(+Routine,+Language,+PredicateSpecification)220

5.4.2 参数说明221

5.5 在Prolog与外部代码之间传递指针224

5.6在UNIX下外部代码的渐增装入227

5.6.1 C代码的渐增装入227

5.6.2 Pascal代码的渐增装入229

5.6.3 FORTRAN代码的渐增装入231

5.6.4 汇编代码的渐增装入233

5.7 从外部函数存取Prolog的原子235

5.8Prolog的重要设定237

5.8.1 存贮管理设定237

5.8.2 输入/输出设定237

5.9 用adb调试外部代码子程序237

第六章外部代码输入/输出函数239

6.1Prolog对外部代码I/O的支撑239

6.1.1 stream_code(?Stream,?StreamCode)239

6.2C语言I/O的可用变量239

6.2.1 int QP_stdin239

6.2.2 int QP_stdout239

6.2.3 int QP_stderr240

6.2.4 int QP_curin240

6.2.5 int QP_curout240

6.3C语言I/O所用的例行程序240

6.3.1 QP_getc241

6.3.2 QP_sgetc241

6.3.3 QP_putc241

6.3.4 QP_sputc241

6.3.5 QP_puts241

6.3.6 QP_sputs241

6.3.7 例子241

6.3.8 int QP_printf242

6.3.9 int QP_sprintf242

6.4在C中定义Prolog可存取的I/O流243

6.4.1 用户接口243

6.4.2 参数与返回值243

6.4.3 例子244

第七章存贮器使用和废区收集245

7.1 概述245

7.2存贮管理谓词245

7.2.1 trimcore245

7.2.2 statistics246

7.2.3 statistics(?Keyword,-List)246

7.3 废区收集和程序设计风格247

7.4使用和不使用废区收集249

7.4.1 prolog_flag(gc,-Old,?New)249

7.4.2 gc249

7.4.3 nogc249

7.5监督废区收集工作249

7.5.1 prolog_flag(gc_trace,-Old,?New)250

7.6废区收集和堆扩充的相互影响250

7.6.1 prolog_flag(gc_margin,-Old,?New)250

7.7直接激活废区收集程序251

7.7.1 garbage_collect251

7.8 UNIX用户需知252

7.9 Sun 3用户需知252

附录AQuintus Prolog与DEC-10 Prolog的比较253

A.1 Emacs编辑程序接口253

A.2 求助系统253

A.3 外部函数接口253

A.4 浮点数254

A.5 改进的编译程序/解释程序接口254

A.6 改进的调试程序255

A.7 风格检查255

A.8 基于流的输入和输出256

A.9 数据库引用处理的改进256

A.10 可运行的保存状态256

A.11 存贮管理256

A.12 其他257

附录BQuintus Prolog中的限制258

B.1 数的范围258

B.2 Prolog中的其他限制258

附录C建立TERMCAP数据库259

C.1 Emacs的终端要求259

C.2 VMS支持的终端259

C.3 非VMS终端259

C.4 添加新终端261

C.5 TERMCAP261

第四部分Quintus Prolog库手册265

第一章调用一个Prolog过程267

1.1Prolog调用Prolog267

1.1.1save_servant(+SavedState)267

1.1.2create_servant(+Machine,+SavedStae,+OutFile)268

1.1.3call_servant(+Goal)268

1.1.4 bag_of_all_servant(?Template,+Goal,-Bag)268

1.1.5 reset_servant268

1.1.6 shutdown_servant268

1.2C调用Prolog269

1.2.1Prolog方面269

1.2.2 save_ipc_servant(+SavedState)269

1.2.3 C语言方面270

1.2.4 QP_ipc_create_servant270

1.2.5 QP_ipc_lookup270

1.2.6 QP_ipc_prepare270

1.2.7 QP_ipc_next270

1.2.8 QP_ipc_close271

1.2.9 QP_ipc_shutdown_servant271

1.2.10 QP_ipc_atom_from_string271

1.2.11 QP_ipc_string_from_atom271

1.2.12 实例272

1.3跟踪275

1.3.1 msg_trace(-Oldvalue,+OnorOff)275

第二章表处理276

2.1 简介276

2.2 什么是一个“适当”表IV276

2.3 四个表处理库276

2.4基本表处理-库(basics)276

2.4.1 append(?Prefix,?Suffix,?Comibined)276

2.4.2member(?Element,?List)277

2.4.3memberchk(+Element,+List)278

2.4.4 nonmember(Element,+List)278

2.5 顺序表—库(lists)279

2.6集合表284

2.6.1 集合处理—库(sets)284

2.6.2 与集合有关的谓词286

2.7 有序集合表—库(ordsets)286

第三章项操作库289

3.1 简介289

3.2 六种项处理库289

3.3 查找项的参量—库(arg)289

3.4 修改项参量—库(change_arg)292

3.5 检测项的子项—库(occurs)294

3.6 关于参量序的注记295

3.7 检查函子—库(same_functor)296

3.8 项包含—库(subsumes)297

3.9 合一—库(unify)297

第四章正文处理298

4.1 库(strings)简介298

4.2 类型测试298

4.3常量与字符的转换298

4.3.1 name(?Constant,?Chars)299

4.3.2 atom_chars(?Atom,?Char)299

4.3.3 number_chars(?Number,?Chars)300

4.3.4 char_atom(?Char,?Atom)300

4.4 正文对象比较300

4.5联结302

4.5.1 联结函数303

4.6 求正文对象的长度和内容304

4.7寻找和抽取子串305

4.7.1 midstring/[3-6]307

4.7.2 substring/[4,5]309

4.7.3 subchars/[4,5]310

4.7.4 “span”谓词族310

4.8 生成原子312

4.9 字母大小写转换313

第五章否定316

5.1 库(not)简介316

5.2 “is-not-provable”运算符316

5.3 “is-not-provable”与“is-not-true”-not(Goal)316

5.4不等318

5.4.1 Terml=Term2318

5.4.2 Terml~=Term2318

5.5 强制目标确定—once(goal)319

5.6 小结319

第六章文件操作320

6.1 库(files)简介320

6.2 文件的内部操作320

6.3 文件的重命名和删除320

6.4 检查文件是否存在323

6.5有关的其他库文件325

6.5.1 库(ar_open)325

6.5.2 库(ask)325

6.5.3 库(big_text)326

6.5.4 库(crypt)326

6.5.5 库(directory)326

6.5.6 库(fromonto)326

6.5.7 库(unix)326

第七章查询文件327

7.1 库(directory)简介327

7.2 查询目录中文件327

7.3 查询子目录329

7.4 查询文件和目录的特性329

7.5 小结331

第八章获取用户输入332

8.1 简介332

8.2 字符分类—库(ctypes)332

8.3 行的读和写—库(lineio)335

8.4 读取连续行—库(continued)336

8.5读取英语句子337

8.5.1 库(read_in)337

8.5.2 库(read_sent)338

8.6 Yes—no询问及其他—库(ask)338

8.7 其他提示的输入—库(prompt)341

8.8 类Pascal的输入—库(readconst)342

第九章非支撑库344

9.1‘Tools’目录344

9.1.1 交叉参考—库(xref)344

9.1.2 库(plint)344

9.1.3 兼容性检查—库(checker)344

9.2库目录中非支撑的程序包344

9.2.1 联机文件344

9.2.2 库程序概览345

主要参考文献350

1989《人工智能语言》由于是年代较久的资料都绝版了,几乎不可能购买到实物。如果大家为了学习确实需要,博主可为大家寻取其电子版PDF文件(由陈世福,潘金贵等编译 1989 北京:科学技术文献出版社;重庆分社 出版的版本) ,有需要的可以向博主求助,我会及时受理并将完整350页PDF电子档下载地址发送给你。