elisp——列表处理

Lisp

Lisp是指 =LISt Processing=, 列表是Lisp语言的基础。

GNU Emacs Lisp很大程度受20世纪60年代的MacLisp影响,也受到80年代成为标准的Common Lisp影响。

Emacs Lisp比Common Lisp简单的多,标准版本的Emacs发行版中包含一个可选的扩展文件 =cl.el=, 为Emacs Lisp增加许多Common Lisp特性。

列表形式:

1
2
3
'(rose violet daisy buttercup)
'(this list has (a list inside of it))
() ;; 空列表

Lisp原子

在一个列表中,原子是由空格一一分隔的;原子可以紧跟括号。

双引号中的文本,不论是句子或者锻炼,都是一个原子看待,称作 =串(string)=:

1
'(this line includes "text between quotation marks.")

列表和原子的书面表示被称作 =符号表达式(symbolic expression)=, 或者 =s-表达式(s-expression)=. 在很多书中, =表格(form)= 是表达式的同义词。

列表中空格

列表中空格的数量无关紧要:

1
2
3
'(this list
looks like this)
'(this list looks like this)

单引号(quote)

当单引号位于一个列表之前时,它告诉Lisp不要对这个列表做任何操作,而仅仅是按其原样。

如果一个列表前面没有单引号,则列表第一个符号是要要执行的函数。

在列表右边按键 =C-x C-e= 会执行改列表语句:

1
(+ 2 2)

Lisp解释器与字节码

Lisp解释器总是优先处理最内层的列表。

通过编译命令 =byte-compile-file= 可以将 =.el= 程序编译为 =字节码=,一般后缀名是 =.elc=

求值

对一个符号表达式求值几乎总是使Lisp解释器返回一个值,同时可能产生一个 =附带效果= ,或者,产生一个错误消息。

很多书籍翻译时容易说成 =副作用=,而这个词在中文里面是容易引起误解的,翻译为 =附带效果= 更好一些。

变量

……