array数组 由任意数量的槽位构成,用于存放或引用其他 Lisp 对象,这些槽位在内存中连续排列。访问数组中任意元素所花费的时间大致相同。与之相对,访问列表中的元素所需时间与元素在列表中的位置成正比。(列表末尾的元素比开头的元素访问耗时更长。)
Emacs 定义了四种数组:strings字符串、vectors向量、bool-vectors布尔向量和 char-tables字符表。
字符串是字符构成的数组,向量是可存放任意对象的数组。布尔向量只能存放 t 或 nil。这类数组的长度上限为最大定长整数,具体受系统架构限制和可用内存影响。字符表是稀疏数组,使用任意有效字符编码作为索引;它们可以存放任意对象。
数组的第一个元素下标为 0,第二个元素下标为 1,依此类推。这称为 zero-origin从零开始 索引。例如,一个包含四个元素的数组,下标为 0、1、2、3。最大可用下标值为数组长度减一。数组一旦创建,其长度就固定不变。
所有 Emacs Lisp 数组都是一维的。(大多数其他编程语言支持多维数组,但这并非必需;你可以用嵌套的一维数组达到同样效果。)每种数组都有自己的读取语法;详情见后续小节。
数组类型是序列类型的子集,它包含字符串类型、向量类型、布尔向量类型和字符表类型。