Practical Common Lisp(Chinese Translation)

This document was uploaded by one of our users. The uploader already confirmed that they had the permission to publish it. If you are author/publisher or own the copyright of this documents, please report to us by using this DMCA report form.

Simply click on the Download Book button.

Yes, Book downloads on Ebookily are 100% Free.

Sometimes the book is free on Amazon As well, so go ahead and hit "Search on Amazon"

Author(s): Peter Seibel; Tian Chun(Translator)
Series: NA
Publisher: People’s Posts and Telecommunications Publishing House
Year: 2011

Language: Chinese
Pages: 421
City: Beijing

目录......Page 5
Practical Common Lisp......Page 0
第1章 绪言:为什么是Lisp?......Page 16
1.1 为什么是Lisp?......Page 17
1.2 Lisp的诞生......Page 19
1.3 本书面向的读者......Page 21
2.1 选择一个Lisp实现......Page 23
2.2 安装和运行Lisp in a Box......Page 24
2.3 放开思想:交互式编程......Page 25
2.5 Lisp风格的“Hello, World”......Page 26
2.6 保存你的工作......Page 28
调试一个运行在一亿英里之外且价值一亿美元硬件上的程序是件有趣的经历。拥有一个运行在宇宙飞船上的读-求值-打印循环,在查找和修复这个问题的过程中,被证明是无价的。......Page 31
3.1 CD和记录......Page 32
3.2 录入CD......Page 33
3.3 查看数据库的内容......Page 34
3.4 改进用户交互......Page 36
3.5 保存和加载数据库......Page 38
3.6 查询数据库......Page 39
3.7 更新已有的记录——WHERE的再次使用......Page 43
3.8 消除重复,获益良多......Page 44
3.9 总结......Page 47
4.2 打开黑箱......Page 49
4.3 S-表达式......Page 50
4.4 作为Lisp形式的S-表达式......Page 53
4.6 特殊操作符......Page 54
4.7 宏......Page 55
4.8 真、假和等价......Page 56
4.9 格式化Lisp代码......Page 58
5.1 定义新函数......Page 60
5.2 函数形参列表......Page 61
5.3 可选形参......Page 62
5.4 剩余形参......Page 63
5.5 关键字形参......Page 64
5.6 混合不同的形参类型......Page 65
5.7 函数返回值......Page 66
5.8 作为数据的函数——高阶函数......Page 67
5.9 匿名函数......Page 69
6.1 变量基础......Page 71
6.2 词法变量和闭包......Page 74
6.3 动态(特殊)变量......Page 75
6.4 常量......Page 78
6.5 赋值......Page 79
6.6 广义赋值......Page 80
6.7 其他修改位置的方式......Page 81
第7章 宏:标准控制构造......Page 83
7.1 WHEN和UNLESS......Page 84
7.2 COND......Page 85
7.4 循环......Page 86
7.5 DOLIST和DOTIMES......Page 87
7.6 DO......Page 88
7.7 强大的LOOP......Page 90
8.1 Mac的故事:只是一个故事......Page 92
8.2 宏展开期和运行期......Page 93
8.3 DEFMACRO......Page 94
8.4 一个示例宏:do-primes......Page 95
8.5 宏参数......Page 96
8.6 生成展开式......Page 97
8.7 堵上漏洞......Page 99
8.8 用于编写宏的宏......Page 102
另一个经典的用于编写宏的宏:ONCE-ONLY......Page 103
8.9 超越简单宏......Page 104
9.1 两个最初的尝试......Page 105
9.2 重构......Page 106
9.3 修复返回值......Page 108
9.4 更好的结果输出......Page 109
9.6 测试层次体系......Page 111
9.7 总结......Page 113
10.1 数字......Page 115
10.2 字面数值......Page 116
10.3 初等数学......Page 118
10.5 高等数学......Page 120
10.7 字符比较......Page 121
10.8 字符串......Page 122
10.9 字符串比较......Page 123
11.1 向量......Page 125
11.3 作为序列的向量......Page 127
11.4 序列迭代函数......Page 128
11.5 高阶函数变体......Page 130
11.6 整个序列的管理......Page 131
11.8 子序列管理......Page 132
11.9 序列谓词......Page 133
11.11 哈希表......Page 134
11.12 哈希表迭代......Page 136
12.1 “没有列表”......Page 137
12.2 函数式编程和列表......Page 139
12.3 “破坏性”操作......Page 141
12.4 组合回收性函数和共享结构......Page 143
12.5 列表处理函数......Page 144
12.6 映射......Page 145
12.7 其他结构......Page 146
13.1 树......Page 147
13.2 集合......Page 148
13.3 查询表:alist和plist......Page 150
13.4 DESTRUCTURING-BIND......Page 153
14.1 读写文件数据......Page 155
14.4 文件输出......Page 157
14.5 关闭文件......Page 158
14.6 文件名......Page 159
14.7 路径名如何表示文件名......Page 160
14.8 构造新路径名......Page 162
14.10 与文件系统交互......Page 164
14.11 其他I/O类型......Page 166
15.2 *FEATURES*和读取期条件化......Page 168
15.3 列目录......Page 170
15.4 测试一个文件的存在......Page 173
15.5 遍历一个目录树......Page 174
16.1 广义函数和类......Page 176
16.2 广义函数和方法......Page 178
16.3 DEFGENERIC......Page 179
16.4 DEFMETHOD......Page 180
16.5 方法组合......Page 181
16.6 标准方法组合......Page 182
16.7 其他方法组合......Page 184
曾经使用过诸如Java和C++这些静态类型消息传递语言的程序员们可能认为多重方法听起来类似于这些语言中一种称为方法重载(method overloading)的特性。不过这两种语言特性事实上相当不同,因为重载的方法是在编译期被选择的,其所基于的是编译期的参数类型而不是运行期。为了看到方法重载的工作方式,考虑下面的两个Java类:......Page 185
如果重载的方法像Common Lisp的多重方法那样工作,那么上面将代替打印出“B/B”。在消息传递语言里有可能手工实现多重分发,但这将与消息传递模型背道而驰,因为一个多重分发的方法中的代码并不属于任何一个类。......Page 186
16.9 未完待续……......Page 187
术语“用户定义的类”不是来自语言标准的术语──从技术上来讲,当我说“用户定义的类”时我指的是那些属于24TSTANDARD-OBJECT24T的子类并且其元类(metaclass)是24TSTANDARD-CLASS24T的类。但由于我不打算谈论你可以定义不是24TSTANDARD-OBJECT24T的子类并且其元类不是24TSTANDARD-CLASS24T的那些类的方式,因此你根本不需要关心这点。“用户定义的”并不是一个用来描述这些类的完美术语,因为实现可能以相同的方式定义了特定的类。不过,将.........Page 188
17.2 槽描述符......Page 189
17.3 对象初始化......Page 190
17.4 访问函数......Page 192
17.5 WITH-SLOTS和WITH-ACCESSORS......Page 195
17.7 槽和继承......Page 197
17.8 多重继承......Page 198
17.9 好的面向对象设计......Page 200
第18章 一些FORMAT秘决......Page 202
18.2 FORMAT指令......Page 203
18.4 字符和整数指令......Page 205
18.5 浮点指令......Page 207
18.6 英语指令......Page 208
18.7 条件格式化......Page 209
18.8 迭代......Page 210
18.9 跳,跳,跳......Page 212
18.10 还有更多……......Page 213
第19章 超越异常处理:状况和再启动......Page 214
19.2 状况......Page 215
19.3 状况处理器......Page 216
24THANDLER-CASE24T是与Java或Python风格的异常处理最接近的Common Lisp相似物。你在Java中可能写成这样:......Page 217
19.4 再启动......Page 218
19.5 提供多个再启动......Page 221
19.6 状况的其他用法......Page 222
对于编写健壮的软件方面的信息,你可以从查找一本Glenford J.Meyers编写的叫做《Software Reliability》(John Wiley & Sons,1976)的书开始。Bertrand Meyer关于Design By Contract的著作也提供了一种思考软件正确性的有用方式。例如,参见他的《Object-Oriented Software Construction》(Prentice Hall,1997)一书的第11和12章。不过要记住,Bertrand Meyer是E.........Page 223
20.2 维护词法环境......Page 224
20.3 局部控制流......Page 227
20.4 从栈上回退......Page 230
20.5 多值......Page 233
20.6 EVAL-WHEN......Page 235
20.7 其他特殊操作符......Page 237
21.1 读取器是如何使用包的......Page 239
21.2 包和符号的词汇表......Page 241
21.3 三个标准包......Page 242
21.4 定义你自己的包......Page 243
21.5 打包可重用的库......Page 245
21.6 导入单独的名字......Page 246
21.7 打包技巧......Page 247
21.8 包的各种疑难杂症......Page 248
22.1 LOOP的组成部分......Page 251
22.3 计数型循环......Page 252
22.4 在集合和包上循环......Page 253
22.5 等价-然后(equals-then)迭代......Page 254
22.6 局部变量......Page 255
22.8 值汇聚......Page 256
22.9 无条件执行......Page 257
22.10 条件执行......Page 258
22.11 设置和拆除......Page 259
22.12 终止测试......Page 261
22.13 把所有东西放在一起......Page 262
23.1 垃圾过滤器的心脏......Page 263
23.2 训练过滤器......Page 266
23.3 每单词的统计......Page 268
23.4 合并概率......Page 270
23.6 训练过滤器......Page 272
23.7 测试过滤器......Page 273
23.8 一组工具函数......Page 275
23.9 分析结果......Page 276
23.10 接下来的工作......Page 278
24.1 二进制文件......Page 280
24.2 二进制格式基础......Page 281
24.3 二进制文件中的字符串......Page 282
24.4 复合结构......Page 284
24.5 设计宏......Page 285
24.6 把梦想变成现实......Page 286
24.7 读取二进制对象......Page 287
24.9 添加继承和标记的结构......Page 290
24.10 跟踪继承的槽......Page 292
24.11 带有标记的结构......Page 294
24.12 基本二进制类型......Page 296
24.13 当前对象栈......Page 298
第25章 实践:一个ID3解析器......Page 300
25.1 一个ID3v2标签的结构......Page 301
25.3 整数类型......Page 302
25.4 字符串类型......Page 304
25.5 ID3标签头......Page 307
25.6 ID3帧......Page 308
25.7 检测标签补白......Page 310
25.8 支持ID3的多个版本......Page 311
25.9 版本化的帧基础类......Page 313
25.10 版本化的具体帧类......Page 314
25.11 你实际需要哪些帧?......Page 315
25.12 文本信息帧......Page 316
25.13 评论帧......Page 318
25.14 从ID3标签中解出信息......Page 319
26.1 30秒介绍服务端Web编程......Page 324
26.2 AllegroServe......Page 326
26.3 用AllegroServe生成动态内容......Page 328
26.4 生成HTML......Page 329
26.6 查询参数......Page 332
26.7 Cookie......Page 334
26.8 一个小型应用框架......Page 335
26.9 实现......Page 336
用于你将在本章中开发的代码的包如下所示:......Page 340
其中的24T:use24T部分可以让你访问那些从第14、8和25章所定义的包中导出名字所对应的函数和宏,而24T:export24T部分导出了该库将要提供的API,你将在第29章里用到它们。......Page 341
27.2 定义一个模式......Page 342
27.3 插入值......Page 344
27.4 查询数据库......Page 346
27.5 匹配函数......Page 348
27.6 获取结果......Page 350
27.7 其他数据库操作......Page 351
28.1 Shoutcast协议......Page 353
用于你将在本章里开发的代码的包如下所示:......Page 354
28.3 实现Shoutcast......Page 356
29.1 播放列表......Page 361
由于这是一个高阶应用,因此它用到了许多底层包。它还从ACL-SOCKET包中导入了三个符号,并从MULTIPROCESSING包中导入了其余两个,这是因为它只需要这两个包中导出的5个符号而不需要其他的139个符号。......Page 362
29.2 作为歌曲源的播放列表......Page 363
29.3 操作播放列表......Page 366
29.4 查询参数类型......Page 369
29.5 样板HTML......Page 370
29.6 浏览页......Page 372
29.7 播放列表......Page 374
29.8 查找播放列表......Page 376
29.9 运行应用程序......Page 377
30.1 设计一个领域相关语言......Page 378
30.2 FOO语言......Page 379
30.3 字符转义......Page 381
由于FOO是一个底层库,因此你所开发的这个包并不依赖很多外部代码——只有通常依赖的来自26TCOMMON-LISP26T包的名字以及几乎同样经常依赖的来自26TCOM.GIGAMONKEYS.MACRO-UTILITIES26T的宏生成宏的名字。另一方面,该包需要导出所有被使用FOO的代码所需要的名字。下面是来自可从本书Web站点上下载的源代码中的26TDEFPACKAGE26T定义:......Page 382
30.4 缩进打印器......Page 383
30.5 HTML处理器接口......Page 384
30.6 美化打印器后台......Page 385
现在你可以做类似下面的事情:......Page 386
30.7 基本求值规则......Page 387
30.8 下一步是什么?......Page 391
31.1 编译器......Page 392
31.2 FOO特殊操作符......Page 396
31.3 FOO宏......Page 400
31.4 公共API......Page 403
31.5 结束语......Page 404
32.1 查找Lisp库......Page 406
32.3 让它工作,让它正确,让它更快......Page 408
32.4 分发应用程序......Page 414
32.5 何去何从......Page 417
对《Practical Common Lisp》的评价(封面)......Page 10
对《Practical Common Lisp》的评价......Page 11
关于技术审稿人......Page 12
致谢......Page 13
书评(封底)......Page 14
作者注(封底)......Page 15