第1章 基本概念 1
1.1 引言 1
1.2 LISP解译程式 1
1.3 求值 3
1.3.1 对更复杂的s-运算式进行求值 3
1.4 函数的引数 6
1.5 基元和系结 7
1.6 离开LISP 11
1.7 摘要 12
习题 13
第2章 符号计算 15
2.1 引言 15
2.2 串列的更深入探讨 15
2.3 把事物当成文字看待 17
2.4 car和cdr 21
2.5 cadr等 25
2.6 空串列 27
2.7 cons 28
2.8 串列建构函数 31
2.9 摘要 32
习题 33
第3章 定义自己的函数 35
3.1 引言 35
3.2 使用者定义的函数 35
3.3 自由变数 41
3.4 超级括弧 44
3.5 将函数储存於档案内 44
3.5.1 自动初始化 45
习题 46
3.6 摘要 46
第4章 述句、条件式与逻辑运算子 49
4.1 引言 49
4.2 LISP的述句 49
4.3 条件式 54
4.3.1 更复杂的cond 55
4.3.2 cond的一般形式 58
4.4 逻辑运算子 61
4.4.1 使用and和or控制程式的流程 62
4.5 摘要 63
习题 64
第5章 递归计算 65
5.1 引言——递归计算与反覆计算之比较 65
5.2 递归的基本概念 66
5.3 递归计算与参数系结 68
5.4 递归计算常犯的错误 69
5.5 更复杂的递归计算 70
5.6 摘要 77
习题 77
6.2 prog 79
第6章 LISP中的反覆计算 79
6.1 引言 79
6.2.1 一般的prog结构 81
6.3 反覆计算与递归计算之比较 83
6.4 其它的反覆形式 84
6.4.1 更结构化的反覆计算 85
6.5 摘要 86
习题 87
7.2 基本概论 89
7.1 引言 89
第7章 性质串列 89
7.3 实例 91
7.4 性质串列的重要性 93
7.5 性质串列以及基元的唯一性 93
7.6 分离式性质串列 94
7.7 摘要 95
习题 96
8.1 引言 99
8.2 函数作为引数使用 99
第8章 以函数作为引数的函数:eval、apply和对映函数 99
8.3 apply 101
8.4 eval 105
8.4.1 eval的背景问题 107
8.5 对映函数 108
8.5.1 各式各样的对映函数 110
8.5.2 apply-append技巧 112
8.6 摘要 113
习题 114
9.2 不具名称的函数 119
第9章 lambda 119
9.1 引言 119
9.3 def、putd和LISP的内部构造 124
9.4 一些参考范例 125
9.5 function函数 127
9.6 lambda用於系结变数之法 128
9.7 lambda的重要性 129
9.8 摘要 130
习题 131
10.2 read和print 133
第10章 资料的读取和写出 133
10.1 引言 133
10.3 使用特异的名称读取和列印基元 137
10.4 字串 141
10.5 I/O的重定方向 142
10.6 美观列印 144
10.7 其它的输入/输出 145
10.8 LISP中的LISP 145
10.8.1 evalquote顶层 147
10.8.2 read-eval-print回圈 148
10.9 摘要 149
习题 149
第11章 侦错 151
11.1 LISP中的侦错问题 151
11.2 中断的read-eval-print回圈 152
11.3 检查堆叠的内容 153
11.4 侦错程式 155
11.5 追踪及中断 162
11.6 摘要 165
习题 166
第12章 其它类型的函数 169
12.1 引言 169
12.2 expr与fexpr 170
12.2.1 nlambda 172
12.2.2 fexpr的背景效应 173
12.3 函数的规律 175
12.4 lexpr 175
12.4.1 定义lexpr的更简便方法 177
12.4.2 lexpr形式 178
12.4.3 其它的lexpr函数:LISTIFY和SETARG 179
12.5 闭锁 179
12.5.1 封闭一组函数 183
12.6 已编译以及外来的函数 184
12.7 扩充的lambda形式 186
12.8 摘要 186
习题 187
13.2 以巨集设计可读性更高的程式码 191
13.1 引言 191
第13章 巨集 191
13.3 巨集的定义法 193
13.4 巨集的展开 195
13.5 巨集范例 196
13.6 设计巨集的技巧 198
13.6.1 defmacro 199
13.7 let巨集 201
13.8 setf 202
13.9 优雅的使用巨集 203
13.10 其它 204
13.11 巨集的代换 205
13.12 摘要 206
习题 207
第14章 读取巨集 209
14.1 引言 209
14.2 在read时执行函数 209
14.3 读取巨集的定义法 211
14.4 接合巨集 212
14.5 反引号巨集 214
14.5.1 在巨集定义内使用反引号 217
14.6 摘要 218
习题 219
第15章 点对与其它内部结构 221
15.1 引言 221
15.2 串列的内部表示法 221
15.3 点对记号法 223
15.4 指向同一个物件的多重指标 225
15.4.1 eq 227
15.5 rplaca和rplacd的危险性 228
15.6 摘要 233
习题 234
第16章 错误处理以及非标准的控制流程 239
16.1 以程式处理错误的状况 239
16.2 errset 240
16.3 用err模拟错误 241
16.4 catch与throw 241
16.4.1 更具弹性的catch与throw 243
16.5 errset、err与catch、throw的比较 244
16.7 摘要 245
16.6 自动载入 245
习题 246
第17章 LISP符号表 247
17.1 再谈read 247
17.2 登录基元的名称 248
17.3 基元的表示法 249
17.4 oblist 249
17.5 处理oblist的函数 251
17.5.1 制造新基元 251
17.5.2 自动产生名称 252
17.5.3 从物件串列中移去基元 255
17.6 应用——模组内的区域变数 256
17.7 摘要 258
习题 259
第18章 其它的资料型态 261
18.1 引言 261
18.2 FRANZ所能提供的资料型态 262
18.3 字串 264
18.4 阵列 266
18.4.1 各式各样的阵列存取架构 267
18.5 小型向量 268
18.6 向量与直接向量 269
18.6.1 以向量做为使用者定义的资料型态 270
18.6.2 直接向量 272
18.7 value 272
18.8 二进位 274
18.9 摘要 275
习题 276
19.2.1 LISP的繁衍 277
19.2 作业系统的函数 277
第19章 系统函数 277
19.1 引言 277
19.2.2 建立一个shell子处理过程 279
19.2.3 执行UNIX命令 279
19.2.4 覆盖现行的LISP处理过程 282
19.2.5 终止现行的LISP处理过程 283
19.2.6 储存现行的LISP处理过程 283
19.2.7 改变现行目录 283
19.2.9 捕捉讯号 284
19.2.8 UNIX环境的相关资讯之取得 284
19.3 LISP内部的系统函数 285
19.3.1 判断基元是否已系结某个值 286
19.3.2 明显地呼叫LISP顶层 286
19.3.3 废物收集 286
19.3.4 计时 286
19.3.5 取得与LISP相关的线上资讯 286
19.3.6 内部的选择项 287
19.4 摘要 287
20.1 LISP编译简介 289
第20章 编译 289
20.2 LISP编译程式的用法 290
20.2.1 liszt 292
20.3 编译程式中的宣告 292
20.3.1 特殊的变数 293
20.3.2 其它的宣告 295
20.3.3 区域性的宣告 296
20.4 编译程式的其它特殊形式 297
20.4.1 eval-when 297
20.4.2 引入其它档案 298
20.4.3 特殊的progn 298
20.4.4 函数定义 298
20.4.5 其它的形式 299
20.5 编译程式特有的程式设计顾虑 299
20.5.1 lexpr的问题 299
20.5.2 文字的问题 299
20.5.5 巨集的自动载入 300
20.6 转移表 300
20.5.3 编译算术函数 300
20.5.4 只供编译程式使用的巨集 300
20.7 编译程式所提供的选择项 301
20.8 初始化 302
20.9 摘要 302
习题 303
21.1 引言 305
21.2 样式配对 305
第21章 LISP的应用:样式配对 305
21.3 有关近似性的说明 306
21.4 样式配对变数的系结 308
21.5 统一性 311
21.6 配对程式 312
21.7 摘要 317
习题 318
第22章 LISP的应用:联结式资料库管理系统 319
22.1 引言 319
22.2 联结式资料库的实作 319
22.2.1 某些实作上的考虑事项 320
22.2.2 管理程式 321
22.3 建立索引 326
22.4 推理式撷取程式 330
22.4.1 向後链结 330
22.4.2 推理式撷取程式的实作 331
22.5 摘要 333
习题 334
附录A Franz LISP函数摘要 337
A.1.1.1 判断资料型态的函数 339
A.1.1 一般的资料结构述句 339
A.1 存取及处理资料结构的函数 339
A.1.1.2 资料结构的比较函数 341
A.1.2 串列 342
A.1.2.1 串列建构函数 342
A.1.2.2 串列述句 342
A.1.2.3 串列存取函数 343
A.1.2.4 串列处理函数 344
A.1.3 符号和字串 346
A.1.3.1 符号和字串的产生函数 346
A.1.3.3 符号和字串存取函数 348
A.1.3.2 符号和字串述句 348
A.1.3.4 符号和字串处理函数 349
A.1.4 向量 350
A.1.4.1 向量建构函数 350
A.1.4.2 向量存取函数 351
A.1.4.3 向量处理函数 352
A.1.5 阵列 352
A.1.5.1 阵列建构函数 352
A.1.5.2 阵列存取函数 353
A.1.5.3 阵列处理函数 354
A.1.6 小型向量 355
A.1.6.1 小型向量建构函数 355
A.1.6.2 小型向量存取函数 355
A.1.6.3 小型向量处理函数 355
A.1.7 二进位码资料 356
A.1.8 结构 356
A.1.8.1 联结串列函数 356
A.1.8.2 性质串列函数 357
A.1.8.4 fclosure函数 358
A.1.9 其它的资料结构函数 358
A.1.8.3 tconc结构函数 358
A.2 算术函数 360
A.2.1 简单的算术函数 360
A.2.2 算术述句 362
A.2.3 三角函数 363
A.2.4 大数函数 364
A.2.5 位元的处理 364
A.2.6 其它的算术函数 365
A.3 输入/输出函数 366
A.4 系统函数 374
A.5 流程控制函数 382
A.6 控制求值的函数 386
A.7 侦错函数 389
A.8 定义函数的函数 392
A.9 其它的函数 393
A.9.1 lexpr函数 393
A.9.2 宣告函数 393
A.9.3 其它 394
附录B Franz LISP的特殊符号 395
参考书目 399
中英名词对照 401