On Lisp is a comprehensive study of advanced Lisp techniques, with bottom-up programming as the unifying theme. It gives the first complete description of macros and macro applications. The book also covers important subjects related to bottom-up programming, including functional programming, rapid prototyping, interactive development, and embedded languages. The final chapter ...
On Lisp is a comprehensive study of advanced Lisp techniques, with bottom-up programming as the unifying theme. It gives the first complete description of macros and macro applications. The book also covers important subjects related to bottom-up programming, including functional programming, rapid prototyping, interactive development, and embedded languages. The final chapter takes a deeper look at object-oriented programming than previous Lisp books, showing the step-by-step construction of a working model of the Common Lisp Object System (CLOS).
As well as an indispensable reference, On Lisp is a source of software. Its examples form a library of functions and macros that readers will be able to use in their own Lisp programs.
Author(s): Paul Graham;田春(Translator)
Publisher: Prentice Hall
Year: 1993
Language: Chinese
Pages: 432
1 可扩展语言
1.1 渐进式设计
1.2 自底向上程序设计
1.3 可扩展软件
1.4 扩展 Lisp
1.5 为什么 (或说何时) 用 Lisp
2 函数
2.1 作为数据的函数
2.2 定义函数
2.3 函数型参数
2.4 作为属性的函数
2.5 作用域
2.6 闭包
2.7 局部函数
2.8 尾递归
2.9 编译
2.10 来自列表的函数
3 函数式编程
3.1 函数式设计
3.2 内外颠倒的命令式
3.3 函数式接口
3.4 交互式编程
4 实用函数
4.1 实用工具的诞生
4.2 投资抽象
4.3 列表上的操作
4.4 搜索
4.5 映射
4.6 I/O
4.7 符号和字符串
4.8 紧凑性
5 函数作为返回值
5.1 Common Lisp 的演化
5.2 正交性
5.3 记住过去
5.4 复合函数
5.5 在 cdr 上递归
5.6 在子树上递归
5.7 何时构造函数
6 函数作为表达方式
6.1 网络
6.2 编译后的网络
6.3 展望
7 宏
7.1 宏是如何工作的
7.2 反引用 (backquote)
7.3 定义简单的宏
7.4 测试宏展开
7.5 参数列表的解构
7.6 宏的工作模式
7.7 作为程序的宏
7.8 宏风格
7.9 宏的依赖关系
7.10 来自函数的宏
7.11 符号宏 (symbol-macro)
8 何时使用宏
8.1 当别无他法时
8.2 宏还是函数?
8.3 宏的应用场合
9 变量捕捉
9.1 宏参数捕捉
9.2 自由符号捕捉
9.3 捕捉发生的时机
9.4 取更好的名字避免捕捉
9.5 通过预先求值避免捕捉
9.6 通过 gensym 避免捕捉
9.7 通过包避免捕捉
9.8 其他名字空间里的捕捉
9.9 为何要庸人自扰?
10 其他的宏陷阱
10.1 求值的次数
10.2 求值的顺序
10.3 非函数式的展开器
10.4 递归
11 经典宏
11.1 创建上下文
11.2 with- 宏
11.3 条件求值
11.4 迭代
11.5 多值迭代
11.6 需要宏的原因
12 广义变量
12.1 概念
12.2 多重求值问题
12.3 新的实用工具
12.4 更复杂的实用工具
12.5 定义逆
13 编译期计算
13.1 新的实用工具
13.2 举例:贝塞尔曲线
13.3 应用
14 指代宏
14.1 指代的种种变形
14.2 失败
14.3 引用透明 (Referential Transparency)
15 返回函数的宏
15.1 函数的构造
15.2 在 cdr 上做递归
15.3 在子树上递归
15.4 惰性求值
16 定义宏的宏
16.1 缩略语
16.2 属性
16.3 指代宏
17 读取宏 (read-macro)
17.1 宏字符
17.2 dispatching 宏字符
17.3 定界符
17.4 这些发生于何时
18 解构
18.1 列表上的解构
18.2 其他结构
18.3 引用
18.4 匹配
19 一个查询编译器
19.1 数据库
19.2 模式匹配查询
19.3 一个查询解释器
19.4 绑定上的限制
19.5 一个查询编译器
20 续延 (continuation)
20.1 Scheme 续延
20.2 续延传递宏
20.3 Code-Walker 和 CPS Conversion
21 多进程
21.1 进程抽象
21.2 实现
21.3 不那么快速的原型
22 非确定性
22.1 概念
22.2 搜索
22.3 Scheme 实现
22.4 Common Lisp 实现
22.5 减枝
22.6 真正的非确定性
23 使用 ATN 分析句子
23.1 背景知识
23.2 形式化
23.3 非确定性
23.4 一个 ATN 编译器
23.5 一个 ATN 的例子
24 Prolog
24.1 概念
24.2 解释器
24.3 规则
24.4 对于非确定性的需求
24.5 新的实现
24.6 增添 Prolog 特性
24.7 例子
24.8 编译的含义
25 面向对象的 Lisp
25.1 万变不离其宗
25.2 阳春版 Lisp 中的对象
25.3 类和实例
25.4 方法
25.5 辅助方法和组合
25.6 CLOS 与 Lisp
25.7 何时用对象
附录: 包 (packages)
附注
索 引