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 | | |
| | |____________| |_____________| | |
| |________________________________| |
|_____________________________________________|