Emacs Lisp 基础
Table of Contents
练习 elisp 的方式:在 *scratch* buffer 中练习,有几种方式执行:
C-jM-C-xC-x C-e
1. 数据结构
1.1. 注释
分号 ; 表示注释。
(fset 'yes-or-no-p 'y-or-n-p) ; y/n replace yes/no
1.2. 字符串
只允许使用双引号,多行直接换行即可。
1.3. 字符
?x 表示字符 x ,比如 ?a 表示 ASII 97 a 。
字符实际上会被转成 ASII 值,所以你可以使用 ?a 到 ?z 迭代。
1.4. 数字
- int 是 29 位,不是 32 位
- 二进制以
#b开始,比如#b10010110 - 八进制格式为
#o[0-7]比如#o377 - 十六进制以
#x开始,比如#xABCD - 浮点数,比如
0.03.1415926(64 位精度) - 科学记数法
6.02e23
变量 most-positive-fixnum 和 most-negative-fixnum 表示最大和最小数字。
1.5. 布尔
小写的 t 表示 true, nil 表示 false。
在 elisp 中,只有 nil 表示 false 值。其它的值在布尔上下文中都算作 true,包括空字符串,0,和符号 'false ,和空的 vector。
空列表 '() 和 nil 相同。
1.6. 数组
具有固定大小的数组叫做 "vectors",你可以使用方括号来初始化一个 vector,比如:
[1, 2, 3, 4, 5, 6] ["hello", "world"] ["hi", 1, 2, 3 [4 "a"]]
注意不是逗号分隔元素,而是空格。
Vector 可以混合类型,而且可以内嵌。你可以使用 make-vector 来创建它们,而且每一个 vector 都是单例。
1.7. 列表
lisp 中大量的使用了链表。括号中的任何内容都是列表,但除非引用它,否则会被认为是函数调用。有多种引用列表的方式:
(quote (1 2 3)) '(1 2 3) ; 是 quote 的简写 (list 1 (+ 1 1) 3) ; 也生成 (1 2 3) ,但首先会对元素进行计算 `(1 ,(+ 1 1) 3) ; 通过称为 "反引号" 的模板系统创建 (1 2 3)
1.8. Pairs
两个元素的结构,语法是 (head-value . tail-value) ,你必须要引用它。
经常用作查询表结果数据的关联列表,称为 alist 。是一个点对的列表,类似这样:
'( (apple . "red") (banana . "yellow") (orange . "orange") )