Emacs Lisp 基础

Table of Contents

练习 elisp 的方式:在 *scratch* buffer 中练习,有几种方式执行:

  1. C-j
  2. M-C-x
  3. C-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.0 3.1415926 (64 位精度)
  • 科学记数法 6.02e23

变量 most-positive-fixnummost-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") )

2. 运算符

First created: 2020-02-22 22:06:38
Last updated: 2022-12-11 Sun 12:49
Power by Emacs 29.0.91 (Org mode 9.6.6)