sequence序列 是一种表示有序元素集合的 Lisp 对象。Emacs Lisp 中有两类序列:lists列表 和 arrays数组。
列表是最常用的序列类型。列表可容纳任意类型的元素,且可通过添加或者删除元素轻松修改其长度。关于列表的更多内容,参见下一小节。
数组是固定长度的序列,又可进一步细分为字符串(string)、向量(vector)、字符表(char-table)和布尔向量(bool-vector)。向量可容纳任意类型的元素;字符串的元素必须是字符;布尔向量的元素只能是 t 或 nil;字符表与向量类似,但可通过任意有效字符编码进行索引。字符串中的字符可像缓冲区中的字符一样拥有文本属性(see Text Properties),而向量即便元素恰好是字符,也不支持文本属性。
列表、字符串以及其他数组类型也具有重要的共同特性。例如,它们都有一个长度 l,并且所有元素都可以从 0 到 l 减 1 进行索引。有一类被称为序列函数的函数可以接受任意类型的序列。例如,length 函数可以返回任意序列的长度。See 序列、数组与向量。
通常来说,不可能两次读取到同一个序列对象,因为序列在被读取时总会重新创建。如果你两次读取同一个序列的读取语法,会得到内容相同但并非同一个对象的两个序列。只有一个例外:空列表 () 始终表示同一个对象 —— nil。