目录 1
第一部分 5
第一章 理解符号处理 5
1.1符号处理类似于处理词和句子 5
1.2使计算机有智能,符号处理必不可少 6
1.3LISP正是要学的符号处理语言 7
1.4本书第一部分介绍LISP 8
1.5本书第二部分介绍LISP的能力 9
1.6对LISP的几种荒诞的说法 10
提要 11
文献 11
2.1LISP的意思是符号处理 14
第二章 基本LISP函数 14
2.2LISP的程序和数据都由S-表达式构成 15
2.3LISP既可以处理定点数又可以处理浮点数 17
2.4CAR和CDR使表分离 17
2.5常用引号表示有意识地禁止求值 18
2.6把多个CAR和CDR组合在一起使编制程序更容易 19
2.7原子都有值 20
2.8APPEND,LIST和CONS用来构造表 21
2.9LENGTH,REVERSE,SUBST和LAST使基本函数更加齐全 23
2.10解释程序对S-表达式求值 24
2.11EVAL引起再求值 25
提要 26
3.1DEFUN使用户能够产生一些新函数 27
第三章 定义,谓词,条件式及辖域 27
3.2谓词是返回T或NIL的函数 30
3.3AND,OR和NOT用作逻辑运算 33
3.4谓词帮助COND在各种可能值中选择一个值 34
3.5COND使DEFUN能定义更多的函数 35
3.6变量可以为自由变量也可以为约束变量 35
3.7LISP既不是换指示点调用也不是赋值调用 37
3.8自由变量的值是动态确定,而不是词法确定 37
3.9函数名也能作为自变量 37
提要 38
4.1程序设计要求选择控制结构 39
4.2递归允许程序自己使用自己 39
第四章 递归和迭代 39
4.3关于集合和二叉树的问题 43
4.4关于C曲线及龙曲线的问题 45
4.5关于改写逻辑表达式的问题 46
4.6处理表时往往需要使用MAPCAR的迭代 47
4.7PROG设立变量且提供清晰的迭代 49
4.8基于PROG的迭代应该细心地使用 50
4.9问题及其表示确定着合适的控制结构 51
提要 52
文献 52
第五章 特性,A-表,数组和存取函数 53
5.1特性和特性值扩充了原子和值的概念 53
5.2PUTPROP和GET是特性表的两个主要函数 53
5.3ASSOC函数可以从联结表中检索点对 54
5.4STORE和ARRAY是数组使用的两个函数 55
5.5存取函数简化了数据的交互作用 56
提要 57
第六章 使用LAMBDA定义 58
6.1LAMBDA定义匿名的函数 58
6.2常用LAMBDA式来连接函数与自变量表 60
6.3MAPCAN函数便于筛选 61
6.4函数定义的风格因人而异 62
提要 64
第七章 打印,读入和原子处理 65
7.1PRINT和READ函数便于会话 65
7.2梵塔问题 66
7.4原子的分离,结合和生成 67
7.3专门的约定有可能产生特殊的原子名 67
7.5除PRINT和READ之外的特殊输入/输出函数 68
7.6易于安排的打印格式 69
提要 72
文献 72
第八章 定义FEXPR型和MACRO型函数 73
8.1FEXPR型函数是一些不对其自变量求值的函数 73
8.2MACRO型函数先翻译后执行 74
提要 77
第九章 表的存贮,回收和手术 78
9.1内存单元网表示表 78
9.3CONS通过在自由单元中存放指针来建立新表 79
9.2单引号标记是函数QUOTE的简写形式 79
9.4无用单元收集程序为自由存贮表回收内存单元 80
9.5APPEND用复制方法来建立新的表结构 83
9.6NCONC,RPLACA,RPLACD和DELETE危险地替代内存单元的内容 84
9.7EQUAL与EQ并不相同 89
提要 89
文献 90
第十章 有关二值图象的例子 91
10.1二值图象容易处理 91
10.2用二值图象的分析可以找到物体 91
10.3在二值图象中求得的许多特征可以用来进行分类 95
10.4二值图象的成分可以用两趟扫视来加以编号 99
文献 101
提要 101
第十一章 有关搜索的例子 102
11.1宽度优先和深度优先是基本的搜索策略 102
11.2使宽度优先和深度优先搜索变得更方便的一种节点队列 103
11.3最佳优先搜索和爬山策略要求分类 108
11.4分类问题 109
11.5量水问题 112
11.6皇后问题 114
提要 115
文献 115
第十二章 有关数学的例子 116
12.1中缀表示很容易转换成前缀表示 116
12.2用S-表达式表示稀疏矩阵很有用 119
12.3用尾递归能求数的平方根 122
12.4电路网络的阻抗计算问题 123
12.5利用嵌套函数求代数方程的根 124
提要 131
文献 131
第二部分 135
第十三章 积木世界 135
13.1积木世界系统制订一个规划 135
13.2积木世界系统要求某些数字捣弄函数 136
13.3积木世界系统的函数是比较浅显的 136
13.4数字捣弄函数是可以伪造的 140
13.5仿真是简单的 141
提要 142
文献 142
第十四章 好的程序设计规则和调试 143
14.1积木世界系统说明了一些好的编程实践规则 143
14.2用BREAK来停止过程的运行常常是有用的 144
14.3TRACE使得函数能打印出它们的自变量和函数值 146
14.4LISP系统提供了许多调试特性 148
提要 149
第十五章 回答有关目标的问题 150
15.1积木世界系统能在一定程度上反省 150
15.2记忆函数的调用产生一段有用的历程 151
15.3产生一个新的定义函数的函数可能是很方便的 154
提要 159
第十六章 从数据中提取函数 160
16.1函数和物体的类型形成一张表格 160
16.2自变量可以提供其自身的过程 161
16.3FUNCALL使得函数名或其描述可以被计算 161
16.4数据驱动的程序设计日趋普及 162
提要 164
文献 164
第十七章 符号的模式匹配和简单的定理证明 165
17.1用LISP不难实现基本的模式匹配 165
17.2匹配意味着对相似S-表达式的比较 165
17.3同时约束增加了匹配操作的表现能力 169
17.4限制条件规定一个模式变量可以匹配什么 171
17.5归结是在命题演算中证明定理的一种方法 174
17.6基于归结原理的定理证明是靠证明它们不可能为假来实现的 178
17.7许多有待解决的匹配问题 178
提要 179
文献 179
第十八章 使用if-then规则的专家问题求解 180
18.1识别世界能说明if-then系统是如何工作的 180
18.2事实与规则都不难表达 180
18.3正向链是从事实推出结论 184
18.4逆向链是从假设演绎到事实 185
提要 189
文献 189
19.1用扩充转移网络表达英语句法 190
第十九章 以解释方式执行的扩充转移网络 190
19.2满足一个扩充转移网络构成一种匹配 191
19.3根据扩充转移网络不难生成LISP程序 191
19.4按照保留说明执行的一种ATN解释程序 195
19.5寄存器增加了ATN描述的能力 199
19.6ATN可以包含成分说明 201
提要 202
文献 203
第二十章 扩充转移网络的编译 204
20.1ATN可以根据明确的说明来编译 204
20.2编译程序视程序为数据 204
20.5LISP本身可以是编译的也可以是解释的 209
20.3编译程序通常比解释程序更难生成 209
20.4编译程序通常是第一流的工作 209
提要 210
文献 210
第二十一章 编写程序的程序和自然语言接口 211
21.1工具世界是一个例题 211
21.2回答问题分四步来完成 211
21.3简单程序能够查点和枚举描述-匹配物 213
21.4问答程序先建立一段程序然后执行之 215
21.5搜索程序能够自动编写 216
21.6用一个简单的ATN来确定如何建立导引分析树 219
21.7特性尚不充分 219
文献 220
提要 220
第二十二章 框架的实现 221
22.1框架是一种广义的特性表 221
22.2框架可以用嵌套的联结表来表示 221
22.3FGET,FPUT和FREMOVE是基本的框架处理函数 223
22.4能够利用DEFAULT和IF-NEEDED幽灵的简单程序 226
22.5通过AKO槽获取继承 227
22.6FPUT+和REMOVE+呼唤幽灵 228
提要 228
文献 228
第二十三章 用LISP解释LISP 230
23.1简单的符号处理语言很容易解释 230
23.2动态的和词法的变量约束都能处理 234
23.3LISP最好用LISP来定义 237
23.4优异的控制结构往往起源于基本的LISP解释程序 238
提要 238
文献 238
习题答案 239
文献目录 286
附录 305
附录一 INTERLISP 305
附录二 基本LISP函数 309
附录三 MACLISP的使用 312
附录四 注释 314
译者附加参考资料 320
PDP-11机上LISP语言使用说明 320
索引 357