В представлении данных часто естественно составлять из объектов данных упорядоченные множества, представленные как вектор. На элементы вектора можно сослаться через их расположение, ничего не зная о самих элементах. С другой стороны, представленные в виде вектора элементы данных можно просто подвергнуть единообразным действиям на основе их содержания, например таким, как удаление определённых элементов из множества, упорядочивание множества по какому-либо критерию и так далее.
Векторы наподобие списков содержат лисповские объекты, таких как атомы, числа, списки или другие векторы. Внешней формой представления векторов является
#(x1 x2 … xn) ; n-элементный вектор
К элементам вектора можно эффективно обращаться напрямую, выбирать и присваивать им значения, задавая номер элемента.
Вектор можно создать с помощью функции
('vector newobject количество [начальный-элемент])
>('ох set ('vector newobject 4 'ох))
#(ох ох ох ох)
Также можно создать матрицу, задавая её размерность:
>('m set ('vector newobject '(3 4) 0))
#(#(0 0 0 0) #(0 0 0 0) #(0 0 0 0))
На новый элемент можно сослаться вызовом:
(вектор elt n)
>(ох elt 0) ; индексация начинается с нуля
ох
Элемент матрицы можно получить так:
(матрица elt x y)
>(m elt 1 2)
0
Для того чтобы изменить элемент, используется функция присваивания setelt:
>(ох setelt 0 'ой)
#(ой ох ох ох)
>(m setelt 1 2 7)
#(#(0 0 0 0) #(0 0 7 0) #(0 0 0 0))
Часть вектора можно построить вызовом:
(вектор subseq начало [конец])
>(ох subseq 0 2)
#(ой ох)
Кроме этого, для векторов обобщены многие функции, упоминавшиеся в связи с работой над списками, это - size, reverse и remove:
>(#(a b c) reverse)
#(c b a)
>(#(a b b a) remove 'a)
#(b b)