书籍详情
实用Common Lisp编程
作者:(美) 塞贝尔 (Sebel,P.)著,田春译
出版社:人民邮电出版社
出版时间:2011-10-01
ISBN:9787115263742
定价:¥89.00
购买这本书可以去
内容简介
这是一本不同寻常的Common Lisp入门书。本书首先从作者的学习经过及语言历史出发,随后用21个章节讲述了各种基础知识,主要包括:REPL 及Common Lisp的各种实现、S- 表达式、函数与变量、标准宏与自定义宏、数字与字符以及字符串、集合与向量、列表处理、文件与文件I/O处理、类、FORMAT格式、符号与包,等等。而接下来的9个章节则翔实地介绍了几个有代表性的实例,其中包含如何构建垃圾过滤器、解析二进制文件、构建ID3 解析器,以及如何编写一个完整的MP3Web 应用程序等内容。最后还对一些未介绍内容加以延伸。本书内容适合Common Lisp 初学者及对之感兴趣的相关人士。
作者简介
暂缺《实用Common Lisp编程》作者简介
目录
第1 章 绪言:为什么是Lisp 1
1.1 为什么是Lisp 2
1.2 Lisp 的诞生 4
1.3 本书面向的读者 6
第2 章 周而复始:REPL 简介 8
2.1 选择一个Lisp 实现 8
2.2 安装和运行Lisp in a Box 10
2.3 放开思想:交互式编程 10
2.4 体验REPL 11
2.5 Lisp 风格的“Hello, World” 12
2.6 保存工作成果 13
第3 章 实践:简单的数据库 17
3.1 CD 和记录 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.3 S-表达式 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.1 WHEN 和UNLESS 70
7.2 COND 71
7.3 AND、OR 和NOT 72
7.4 循环 72
7.5 DOLIST 和DOTIMES 73
7.6 DO 74
7.7 强大的LOOP 76
第8 章 如何自定义宏 78
8.1 Mac 的故事:只是一个故事 78
8.2 宏展开期和运行期 79
8.3 DEFMACRO 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.4 DESTRUCTURING-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.1 API 157
15.2 *FEATURES*和读取期条件化 157
15.3 列目录 159
15.4 测试文件的存在 162
15.5 遍历目录树 164
第16 章 重新审视面向对象:广义函数 165
16.1 广义函数和类 166
16.2 广义函数和方法 167
16.3 DEFGENERIC 168
16.4 DEFMETHOD 169
16.5 方法组合 171
16.6 标准方法组合 172
16.7 其他方法组合 173
16.8 多重方法 174
16.9 未完待续 176
第17 章 重新审视面向对象:类 177
17.1 DEFCLASS 177
17.2 槽描述符 178
17.3 对象初始化 179
17.4 访问函数 182
17.5 WITH-SLOTS 和WITHACCESSORS 185
17.6 分配在类上的槽 186
17.7 槽和继承 187
17.8 多重继承 188
17.9 好的面向对象设计 190
第18 章 一些FORMAT 秘诀 191
18.1 FORMAT 函数 192
18.2 FORMAT 指令 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.1 Lisp 的处理方式 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.6 EVAL-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.1 LOOP 的组成部分 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.1 ID3v2 标签的结构 291
25.2 定义包 292
25.3 整数类型 292
25.4 字符串类型 294
25.5 ID3 标签头 297
25.6 ID3 帧 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.1 30 秒介绍服务器端Web 编程 315
26.2 AllegroServe 317
26.3 用AllegroServe 生成动态内容 320
26.4 生成HTML 321
26.5 HTML 宏 324
26.6 查询参数 325
26.7 cookie 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.1 Shoutcast 协议 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.2 FOO 语言 376
30.3 字符转义 379
30.4 缩进打印器 380
30.5 HTML 处理器接口 381
30.6 美化打印器后台 382
30.7 基本求值规则 385
30.8 下一步是什么 389
第31 章 实践:HTML 生成库,编译器部分 390
31.1 编译器 390
31.2 FOO 特殊操作符 395
31.3 FOO 宏 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
1.1 为什么是Lisp 2
1.2 Lisp 的诞生 4
1.3 本书面向的读者 6
第2 章 周而复始:REPL 简介 8
2.1 选择一个Lisp 实现 8
2.2 安装和运行Lisp in a Box 10
2.3 放开思想:交互式编程 10
2.4 体验REPL 11
2.5 Lisp 风格的“Hello, World” 12
2.6 保存工作成果 13
第3 章 实践:简单的数据库 17
3.1 CD 和记录 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.3 S-表达式 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.1 WHEN 和UNLESS 70
7.2 COND 71
7.3 AND、OR 和NOT 72
7.4 循环 72
7.5 DOLIST 和DOTIMES 73
7.6 DO 74
7.7 强大的LOOP 76
第8 章 如何自定义宏 78
8.1 Mac 的故事:只是一个故事 78
8.2 宏展开期和运行期 79
8.3 DEFMACRO 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.4 DESTRUCTURING-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.1 API 157
15.2 *FEATURES*和读取期条件化 157
15.3 列目录 159
15.4 测试文件的存在 162
15.5 遍历目录树 164
第16 章 重新审视面向对象:广义函数 165
16.1 广义函数和类 166
16.2 广义函数和方法 167
16.3 DEFGENERIC 168
16.4 DEFMETHOD 169
16.5 方法组合 171
16.6 标准方法组合 172
16.7 其他方法组合 173
16.8 多重方法 174
16.9 未完待续 176
第17 章 重新审视面向对象:类 177
17.1 DEFCLASS 177
17.2 槽描述符 178
17.3 对象初始化 179
17.4 访问函数 182
17.5 WITH-SLOTS 和WITHACCESSORS 185
17.6 分配在类上的槽 186
17.7 槽和继承 187
17.8 多重继承 188
17.9 好的面向对象设计 190
第18 章 一些FORMAT 秘诀 191
18.1 FORMAT 函数 192
18.2 FORMAT 指令 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.1 Lisp 的处理方式 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.6 EVAL-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.1 LOOP 的组成部分 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.1 ID3v2 标签的结构 291
25.2 定义包 292
25.3 整数类型 292
25.4 字符串类型 294
25.5 ID3 标签头 297
25.6 ID3 帧 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.1 30 秒介绍服务器端Web 编程 315
26.2 AllegroServe 317
26.3 用AllegroServe 生成动态内容 320
26.4 生成HTML 321
26.5 HTML 宏 324
26.6 查询参数 325
26.7 cookie 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.1 Shoutcast 协议 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.2 FOO 语言 376
30.3 字符转义 379
30.4 缩进打印器 380
30.5 HTML 处理器接口 381
30.6 美化打印器后台 382
30.7 基本求值规则 385
30.8 下一步是什么 389
第31 章 实践:HTML 生成库,编译器部分 390
31.1 编译器 390
31.2 FOO 特殊操作符 395
31.3 FOO 宏 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
猜您喜欢