6 序列、数组与向量

sequence(序列) 类型是另外两种 Lisp 类型的并集:列表(lists)和数组(arrays)。换句话说,任何列表都是序列,任何数组也都是序列。所有序列的共同特征是:每个序列都是元素的有序集合。

array(数组) 是一种固定长度的对象,其每个元素都对应一个存储槽位。所有元素都可在常量时间内访问。数组包含四种类型:字符串(strings)、向量(vectors)、字符表(char-tables)和布尔向量(bool-vectors)。

列表(list)是元素的序列,但它并非单一的原始对象;它由点对单元(cons cells)构成,每个元素对应一个点对单元。查找第 n 个元素需要遍历 n 个点对单元,因此离列表开头越远的元素,访问耗时越长。但列表支持动态添加或移除元素。

下图展示了这些类型之间的关系:

          _____________________________________________
         |                                             |
         |          Sequence                           |
         |  ______   ________________________________  |
         | |      | |                                | |
         | | List | |             Array              | |
         | |      | |    ________       ________     | |
         | |______| |   |        |     |        |    | |
         |          |   | Vector |     | String |    | |
         |          |   |________|     |________|    | |
         |          |  ____________   _____________  | |
         |          | |            | |             | | |
         |          | | Char-table | | Bool-vector | | |
         |          | |____________| |_____________| | |
         |          |________________________________| |
         |_____________________________________________|
emacs

Emacs

org-mode

Orgmode

Donations

打赏

Copyright

© 2025 Jasper Hsu

Creative Commons

Creative Commons

Attribute

Attribute

Noncommercial

Noncommercial

Share Alike

Share Alike