第1章 列表处理 1
1.1 Lisp列表 1
1.1.1 Lisp原子 1
1.1.2 列表中的空格 2
1.1.3 GNU Emacs帮助你输入列表 3
1.2 运行一个程序 3
1.3 产生错误消息 4
1.4 符号名和函数定义 5
1.5 Lisp解释器 5
1.6 求值 6
1.7 变量 7
1.8 参量 8
1.8.1 参量的数据类型 9
1.8.2 作为变量和列表的值的参量 10
1.8.3 数目可变的参量 10
1.8.4 用一个错误类型的数据对象作为参量 10
1.8.5 message函数 11
1.9 给一个变量赋值 12
1.9.1 使用set函数 13
1.9.2 使用setq函数 13
1.9.3 计数 14
1.10 小结 15
1.11 练习 15
第2章 求值实践 16
2.1 缓冲区名 16
2.2 获得缓冲区 17
2.3 切换缓冲区 18
2.4 缓冲区大小和位点的定位 19
2.5 练习 20
第3章 如何编写函数定义 21
3.1 defun特殊表 21
3.2 安装函数定义 23
3.3 使函数成为交互函数 24
3.4 interactive函数的不同选项 25
3.5 永久地安装代码 26
3.6 let函数 27
3.6.1 let表达式的各个部分 27
3.6.2 let表达式例子 28
3.6.3 let语句中的未初始化变量 29
3.7 if特殊表 29
3.8 if-then-else表达式 31
3.9 Lisp中的真与假 32
3.10 save-excursion函数 33
3.11 回顾 35
3.12 练习 37
第4章 与缓冲区有关的函数 38
4.1 查找更多的信息 38
4.2 简化的beginning-of-buffer函数定义 38
4.3 make-whole-buffer函数的定义 40
4.4 append-to-buffer函数的定义 41
4.4.1 append-to-buffer函数的交互表达式 42
4.4.2 append-to-buffer函数体 42
4.4.3 append-to-buffer函数中的save-excursion 43
4.5 回顾 45
4.6 练习 46
第5章 更复杂的函数 47
5.1 copy-to-buffer函数的定义 47
5.2 insert-buffer函数的定义 48
5.2.1 insert-buffer函数中的交互表达式 48
5.2.2 insert-buffer函数体 49
5.2.3 用if表达式(而不是or表达式)编写的insert-buffer函数 49
5.2.4 函数体中的or表达式 50
5.2.5 insert-buffer函数中的let表达式 51
5.3 beginning-of-buffer函数的完整定义 52
5.3.1 可选参量 52
5.3.2 带参量的beginning-of-buffer函数 53
5.3.3 完整的beginning-of-buffer函数 55
5.4 回顾 56
5.5 ?optional参量练习 57
第6章 变窄和增宽 58
6.1 save-restriction特殊表 58
6.2 what-line函数 59
6.3 练习:变窄 60
第7章 基本函数:car、cdr、cons 61
7.1 car和cdr函数 61
7.2 cons函数 63
7.3 nthcdr函数 64
7.4 setcar函数 65
7.5 setcdr函数 66
7.6 练习 67
第8章 剪切和存储文本 68
8.1 zap-to-char函数 69
8.1.1 interactive表达式 69
8.1.2 zap-to-char函数体 70
8.1.3 search-forward函数 70
8.1.4 progn函数 71
8.1.5 总结zap-to-char函数 71
8.1.6 第18版中zap-to-char函数的实现方法 72
8.1.7 progn表达式主体 73
8.2 kill-region函数 74
8.3 delete-region函数:接触C 75
8.4 用defvar初始化变量 76
8.5 copy-region-as-kill函数 77
8.6 回顾 82
8.7 查找练习 83
第9章 列表是如何实现的 85
第10章 找回文本 88
10.1 kill环总览 88
10.2 kill-ring-yank-pointer变量 88
10.3 练习:使用yank函数和nthcdr函数 89
第11章 循环和递归 90
11.1 while 90
11.1.1 while循环和列表 91
11.1.2 一个例子:print-elements-of-list 92
11.1.3 使用增量计数器的循环 93
11.1.4 使用减量计数器的循环 96
11.2 递归 98
11.2.1 使用列表的递归函数 99
11.2.2 用递归算法代替计数器 100
11.2.3 使用cond的递归例子 102
11.3 有关循环表达式的练习 102
第12章 正则表达式查询 104
12.1 查询sentence-end的正则表达式 104
12.2 re-search-forward函数 105
12.3 forward-sentence函数 106
12.4 forward-paragraph:函数的金矿 109
12.5 创建自己的“TAGS”文件 115
12.6 回顾 116
12.7 练习:使用re-search-forward 117
第13章 计数:重复和正则表达式 118
13.1 count-words-region函数 118
13.2 用递归的方法实现单词计数 123
13.3 练习:统计标点符号的数量 127
第14章 统计函数定义中的单词数 128
14.1 计数什么? 128
14.2 单词或者符号是由什么构成的? 129
14.3 count-words-in-defun函数 130
14.4 在一个文件中统计几个函数定义的单词数 132
14.5 查找文件 133
14.6 lengths-list-file函数详解 134
14.7 在不同文件中统计几个函数定义的单词数 135
14.8 在不同文件中递归地统计单词数 137
14.9 为图形显示准备数据 138
14.9.1 对列表排序 138
14.9.2 制作一个文件列表 139
第15章 准备柱型图 144
15.1 graph-body-print函数 148
15.2 recursive-graph-body-print函数 150
15.3 需要打印的坐标轴 151
15.4 练习 151
第16章 配置你的“.emacs”文件 152
16.1 全站点的初始化文件 152
16.2 为一项任务设置变量 153
16.3 开始改变“.emacs”文件 153
16.4 文本和自动填充模式 154
16.5 邮件别名 156
16.6 缩排模式 156
16.7 一些绑定键 156
16.8 加载文件 157
16.9 自动加载 158
16.10 一个简单的功能扩充:line-to-top-of-window 159
16.11 键图 161
16.12 X11的颜色 162
16.13 V19中的小技巧 163
16.14 修改模式行 163
第17章 调试 165
17.1 debug 165
17.2 debug-on-entry 166
17.3 debug-on-quit和(debug) 168
17.4 源代码级调试器edebug 168
17.5 调试练习 170
第18章 结论 171
附录A the-the函数 173
附录B kill环的处理 175
B.1 rotate-yank-pointer函数 175
B.2 yank函数 180
B.3 yank-pop函数 182
附录C 带坐标轴的图 184
C.1 print-graph函数的变量列表 185
C.2 print-Y-axis函数 185
C.2.1 题外话:计算余数 186
C.2.2 构造一个Y轴元素 188
C.2.3 创建Y坐标轴 189
C.2.4 print-Y-axis函数的最后形式 190
C.3 print-X-axis函数 190
C.4 打印整个图形 194
C.4.1 测试print-graph函数 197
C.4.2 绘制函数中单词和符号数的图形 198
C.4.3 打印出来的图形 202