6 Последовательности, Массивы и Векторы

Тип sequence является объединением двух других типов Lisp: списков и массивов. Другими словами, любой список является последовательностью, и любой массив является последовательностью. Общим свойством всех последовательностей является то, что каждая из них представляет собой упорядоченную коллекцию элементов.

Массив array — это объект фиксированной длины с ячейкой для каждого из его элементов. Все элементы доступны за константное время. Четыре типа массивов — это строки, векторы, таблицы символов и булевы векторы.

Список — это последовательность элементов, но это не единый примитивный объект; он состоит из ячеек cons, по одной ячейке на каждый элемент. Поиск n-го элемента требует просмотра n ячеек cons, поэтому доступ к элементам, расположенным дальше от начала списка, занимает больше времени. Но возможно добавлять элементы в список или удалять элементы.

Следующая диаграмма показывает взаимосвязь между этими типами:

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