2.4.7 数组类型

数组包括字符串和向量

数组是由任意多的槽组成的 Lisp 对象,和列表类似,每个槽都可以指向任何的 Lisp 对象;和列表不同,数组的内存是一大块连续的内存,因此查找速度会更快,基本上是常数时间。相比之下,列表的查找时间取决于被查元素的位置。(在列表末尾的元素的查找时间要远远长于列表开头的元素。)

Emacs 定义了四种数组:字符串,向量,布尔向量,以及字符表。

字符串是由字符组成的数组,而向量是由任意对象组成的数组。一个布尔向量只能装着 nil 或者 t。这些数组的最大长度可以一直到 fixnum 能取到的最大值,而这个最大值一般取决于具体的机器架构限制和可用内存。字符表是使用字符索引的数组,它可以储存任何对象。

数组的第一个元素的索引是 0,第二个元素的索引是 1,以此类推。这种索引叫做从零开始的索引。举个例子,一个 4 元素数组由0,1,2,3这四个索引切片。最大的索引值应当是数组长度减一。一旦数组被创建了,它的长度就固定了。

所有的 Emcas Lisp 数组都是一维的。(绝大多数的其他语言提供多维数组,不过这并不重要;在这里,你可以使用复合的一维数组模拟出一样的效果。)每种数组都有它们自己的读取语法。接下来的几章会详细解释。

另外,时刻记住,数组类型是序列类型的子集。数组类型又包括了字符串类型,向量类型,布尔向量类型以及字符表类型。

最后更新于