实用Common Lisp编程

Peter Seibel

文学

LISP 函数式编程 编程 计算机 编程语言 Programming 程序设计 LISP

2011-10

人民邮电出版社

目录
第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
【展开】
内容简介
由塞贝尔编著的《实用Common Lisp编程》是一本不同寻常的Common Lisp入门书。《实用Common Lisp编程》首先从作者的学习经过及语言历史出发,随后用21个章节讲述了各种基础知识,主要包括:REPL及Common Lisp的各种实现、S-表达式、函数与变量、标准宏与自定义宏、数字与字符以及字符串、集合与向量、列表处理、文件与文件I/O处理、类、FORMAT格式、符号与包,等等。而接下来的9个章节则翔实地介绍了几个有代表性的实例,其中包含如何构建垃圾过滤器、解析二进制文件、构建ID3解析器,以及如何编写一个完整的MP3 Web应用程序等内容。最后还对一些未介绍内容加以延伸。 《实用Common Lisp编程》内容适合Common Lisp初学者及对之感兴趣的相关人士。
【展开】
下载说明

1、追日是作者栎年创作的原创作品,下载链接均为网友上传的的网盘链接!

2、相识电子书提供优质免费的txt、pdf等下载链接,所有电子书均为完整版!

下载链接