马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本帖最后由 yularna 于 2014-12-19 21:07 编辑
《实用Common Lisp编程(Practical Common Lisp中文扫描版)》
作者: Peter Seibel
出版社: 人民邮电
原作名: Practical Common Lisp
译者: 田春
出版年: 2011-10
页数: 417
内容简介:
由塞贝尔(Peter Seibel)编著的《实用Common Lisp编程》是一本不同寻常的Common Lisp入门书。《实用Common Lisp编程》首先从作者的学习经过及语言历史出发,随后用21个章节讲述了各种基础知识,主要包括:REPL及Common Lisp的各种实现、S-表达式、函数与变量、标准宏与自定义宏、数字与字符以及字符串、集合与向量、列表处理、文件与文件I/O处理、类、FORMAT格式、符号与包,等等。而接下来的9个章节则翔实地介绍了几个有代表性的实例,其中包含如何构建垃圾过滤器、解析二进制文件、构建ID3解析器,以及如何编写一个完整的MP3 Web应用程序等内容。最后还对一些未介绍内容加以延伸。《实用Common Lisp编程》内容适合Common Lisp初学者及对之感兴趣的相关人士。
作者简介:
塞贝尔(PeterSeibel)从作家演变成程序员,又从程序员演变成作家,其职业生涯可谓一波三折。他在获得英语专业学士学位后做过一段时间的记者工作,后来被Web所吸引。在20世纪90年代早期,他用Perl建立了Mother Jones杂志和Organic Online网站。他作为Web Logic的早期雇员参与了Java革命,随后又在加州大学伯克利分校教授Java编程。他也是第二代Lisp程序员之一,并曾经是Symbolics的早期股东。2003年他辞去技术工作,潜心研究Lisp,并凭借本书获得Jolt生产效率大奖。2009年出版了名噪一时的访谈录《编程人生》(Codersat Work)。
目录:
第1章绪言:为什么是Lisp 1 1.1为什么是Lisp 2
1.2Lisp的诞生 4
1.3本书面向的读者 6
第2章周而复始:REPL简介 8
2.1选择一个Lisp实现 8
2.2安装和运行LispinaBox 10
2.3放开思想:交互式编程 10
2.4体验REPL 11
2.5Lisp风格的“Hello,World” 12
2.6保存工作成果 13
第3章实践:简单的数据库 17
3.1CD和记录 17
3.2录入CD 18
3.3查看数据库的内容 19
3.4改进用户交互 21
3.5保存和加载数据库 23
3.6查询数据库 24
3.7更新已有的记录——WHERE再战江湖 28
3.8消除重复,获益良多 29
3.9总结 33
第4章语法和语义 34
4.1括号里都可以有什么 34
4.2打开黑箱 34
4.3S-表达式 36
4.4作为Lisp形式的S-表达式 38
4.5函数调用 39
4.6特殊操作符 39
4.7宏 41
4.8真、假和等价 42
4.9格式化Lisp代码 43
第5章函数 46
5.1定义新函数 46
5.2函数形参列表 47
5.3可选形参 48
5.4剩余形参 49
5.5关键字形参 50
5.6混合不同的形参类型 51
5.7函数返回值 52
5.8作为数据的函数——高阶函数 53
5.9匿名函数 55
第6章变量 57
6.1变量的基础知识 57
6.2词法变量和闭包 60
6.3动态变量 61
6.4常量 65
6.5赋值 65
6.6广义赋值 66
6.7其他修改位置的方式 67
第7章宏:标准控制构造 69
7.1WHEN和UNLESS 70
7.2COND 71
7.3AND、OR和NOT 72
7.4循环 72
7.5DOLIST和DOTIMES 73
7.6DO 74
7.7强大的LOOP 76
第8章如何自定义宏 78
8.1Mac的故事:只是一个故事 78
8.2宏展开期和运行期 79
8.3DEFMACRO 80
8.4示例宏:do-primes 81
8.5宏形参 82
8.6生成展开式 83
8.7堵住漏洞 84
8.8用于编写宏的宏 88
8.9超越简单宏 90
第9章实践:建立单元测试框架 91
9.1两个最初的尝试 91
9.2重构 92
9.3修复返回值 94
9.4更好的结果输出 95
9.5抽象诞生 97
9.6测试层次体系 97
9.7总结 99
第10章数字、字符和字符串 101
10.1数字 101
10.2字面数值 102
10.3初等数学 104
10.4数值比较 106
10.5高等数学 107
10.6字符 107
10.7字符比较 107
10.8字符串 108
10.9字符串比较 109
第11章集合 111
11.1向量 111
11.2向量的子类型 113
11.3作为序列的向量 114
11.4序列迭代函数 114
11.5高阶函数变体 116
11.6整个序列上的操作 117
11.7排序与合并 118
11.8子序列操作 118
11.9序列谓词 119
11.10序列映射函数 120
11.11哈希表 120
11.12哈希表迭代 122
第12章LISP名字的由来:列表处理 123
12.1“没有列表” 123
12.2函数式编程和列表 126
12.3“破坏性”操作 127
12.4组合回收性函数和共享结构 129
12.5列表处理函数 131
12.6映射 132
12.7其他结构 133
第13章超越列表:点对单元的其他用法 134
13.1树 134
13.2集合 136
13.3查询表:alist和plist 137
13.4DESTRUCTURING-BIND 141
第14章文件和文件I/O 143
14.1读取文件数据 143
14.2读取二进制数据 145
14.3批量读取 145
14.4文件输出 145
14.5关闭文件 146
14.6文件名 147
14.7路径名如何表示文件名 149
14.8构造新路径名 150
14.9目录名的两种表示方法 152
14.10与文件系统交互 153
14.11其他I/O类型 154
第15章实践:可移植路径名库 157
15.1API 157
15.2*FEATURES*和读取期条件化 157
15.3列目录 159
15.4测试文件的存在 162
15.5遍历目录树 164
第16章重新审视面向对象:广义函数 165
16.1广义函数和类 166
16.2广义函数和方法 167
16.3DEFGENERIC 168
16.4DEFMETHOD 169
16.5方法组合 171
16.6标准方法组合 172
16.7其他方法组合 173
16.8多重方法 174
16.9未完待续 176
第17章重新审视面向对象:类 177
17.1DEFCLASS 177
17.2槽描述符 178
17.3对象初始化 179
17.4访问函数 182
17.5WITH-SLOTS和WITHACCESSORS 185
17.6分配在类上的槽 186
17.7槽和继承 187
17.8多重继承 188
17.9好的面向对象设计 190
第18章一些FORMAT秘诀 191
18.1FORMAT函数 192
18.2FORMAT指令 193
18.3基本格式化 194
18.4字符和整数指令 194
18.5浮点指令 196
18.6英语指令 197
18.7条件格式化 198
18.8迭代 199
18.9跳,跳,跳 201
18.10还有更多 202
第19章超越异常处理:状况和再启动 203
19.1Lisp的处理方式 204
19.2状况 205
19.3状况处理器 205
19.4再启动 207
19.5提供多个再启动 210
19.6状况的其他用法 211
第20章特殊操作符 213
20.1控制求值 213
20.2维护词法环境 213
20.3局部控制流 216
20.4从栈上回退 219
20.5多值 223
20.6EVAL-WHEN 224
20.7其他特殊操作符 227
第21章编写大型程序:包和符号 228
21.1读取器是如何使用包的 228
21.2包和符号相关的术语 230
21.3三个标准包 230
21.4定义你自己的包 232
21.5打包可重用的库 234
21.6导入单独的名字 235
21.7打包技巧 236
21.8包的各种疑难杂症 237
第22章高阶LOOP 240
22.1LOOP的组成部分 240
22.2迭代控制 241
22.3计数型循环 241
22.4循环集合和包 242
22.5等价?然后迭代 243
22.6局部变量 244
22.7解构变量 245
22.8值汇聚 245
22.9无条件执行 247
22.10条件执行 247
22.11设置和拆除 248
22.12终止测试 250
22.13小结 251
第23章实践:垃圾邮件过滤器 252
23.1垃圾邮件过滤器的核心 252
23.2训练过滤器 255
23.3按单词来统计 257
23.4合并概率 259
23.5反向卡方分布函数 261
23.6训练过滤器 262
23.7测试过滤器 263
23.8一组工具函数 265
23.9分析结果 266
23.10接下来的工作 268
第24章实践:解析二进制文件 269
24.1二进制文件 269
24.2二进制格式基础 270
24.3二进制文件中的字符串 271
24.4复合结构 273
24.5设计宏 274
24.6把梦想变成现实 275
24.7读取二进制对象 277
24.8写二进制对象 279
24.9添加继承和标记的结构 280
24.10跟踪继承的槽 281
24.11带有标记的结构 284
24.12基本二进制类型 285
24.13当前对象栈 288
第25章实践:ID3解析器 290
25.1ID3v2标签的结构 291
25.2定义包 292
25.3整数类型 292
25.4字符串类型 294
25.5ID3标签头 297
25.6ID3帧 298
25.7检测标签补白 300
25.8支持ID3的多个版本 301
25.9版本化的帧基础类 303
25.10版本化的具体帧类 304
25.11你实际需要哪些帧 305
25.12文本信息帧 307
25.13评论帧 309
25.14从ID3标签中解出信息 310
第26章实践:用AllegroServe进行Web编程 315
26.130秒介绍服务器端Web编程 315
26.2AllegroServe 317
26.3用AllegroServe生成动态内容 320
26.4生成HTML 321
26.5HTML宏 324
26.6查询参数 325
26.7cookie 327
26.8小型应用框架 329
26.9上述框架的实现 330
第27章实践:MP3数据库 334
27.1数据库 334
27.2定义模式 336
27.3插入值 338
27.4查询数据库 340
27.5匹配函数 342
27.6获取结果 344
27.7其他数据库操作 346
第28章实践:Shoutcast服务器 348
28.1Shoutcast协议 348
28.2歌曲源 349
28.3实现Shoutcast 351
第29章实践:MP3浏览器 357
29.1播放列表 357
29.2作为歌曲源的播放列表 359
29.3操作播放列表 362
29.4查询参数类型 365
29.5样板HTML 367
29.6浏览页 368
29.7播放列表 371
29.8查找播放列表 373
29.9运行应用程序 374
第30章实践:HTML生成库,解释器部分 375
30.1设计一个领域相关语言 375
30.2FOO语言 376
30.3字符转义 379
30.4缩进打印器 380
30.5HTML处理器接口 381
30.6美化打印器后台 382
30.7基本求值规则 385
30.8下一步是什么 389
第31章实践:HTML生成库,编译器部分 390
31.1编译器 390
31.2FOO特殊操作符 395
31.3FOO宏 399
31.4公共API 401
31.5结束语 403
第32章结论:下一步是什么 404
32.1查找Lisp库 404
32.2与其他语言接口 406
32.3让它工作,让它正确,让它更快 406
32.4交付应用程序 413
32.5何去何从 415
|