Векторы являются одномерными массивами, следовательно, подтипом массива. Векторы и списки вместе называются последовательностями. Поэтому все обобщенные функции последовательности и функции массива, которые мы обсуждали до сих пор, работают с векторами.
Создание векторов
Функция вектора позволяет создавать векторы фиксированного размера с конкретными значениями. Он принимает любое количество аргументов и возвращает вектор, содержащий эти аргументы.
Пример 1
Создайте новый файл исходного кода с именем main.lisp и введите в него следующий код.
(setf v1 (vector 1 2 3 4 5)) (setf v2 #(a b c d e)) (setf v3 (vector 'p 'q 'r 's 't)) (write v1) (terpri) (write v2) (terpri) (write v3)
Когда вы выполняете код, он возвращает следующий результат —
#(1 2 3 4 5) #(A B C D E) #(P Q R S T)
Обратите внимание, что LISP использует синтаксис # (…) в качестве литеральной записи для векторов. Вы можете использовать этот синтаксис # (…) для создания и включения литеральных векторов в ваш код.
Однако это буквальные векторы, поэтому их изменение не определено в LISP. Поэтому для программирования вы всегда должны использовать векторную функцию или более общую функцию make-array для создания векторов, которые вы планируете изменить.
Функция make-array является более общим способом создания вектора. Вы можете получить доступ к векторным элементам, используя функцию aref .
Пример 2
Создайте новый файл исходного кода с именем main.lisp и введите в него следующий код.
(setq a (make-array 5 :initial-element 0)) (setq b (make-array 5 :initial-element 2)) (dotimes (i 5) (setf (aref a i) i)) (write a) (terpri) (write b) (terpri)
Когда вы выполняете код, он возвращает следующий результат —
#(0 1 2 3 4) #(2 2 2 2 2)
Заполнить указатель
Функция make-array позволяет вам создавать изменяемый размер вектора.
Аргумент fill-pointer функции отслеживает количество элементов, фактически сохраненных в векторе. Это индекс следующей позиции, которая будет заполнена при добавлении элемента в вектор.
Функция векторного нажатия позволяет добавить элемент в конец изменяемого размера вектора. Увеличивает указатель заполнения на 1.
Функция vector-pop возвращает последний добавленный элемент и уменьшает указатель заполнения на 1.
пример
Создайте новый файл исходного кода с именем main.lisp и введите в него следующий код.
(setq a (make-array 5 :fill-pointer 0)) (write a) (vector-push 'a a) (vector-push 'b a) (vector-push 'c a) (terpri) (write a) (terpri) (vector-push 'd a) (vector-push 'e a) ;this will not be entered as the vector limit is 5 (vector-push 'f a) (write a) (terpri) (vector-pop a) (vector-pop a) (vector-pop a) (write a)
Когда вы выполняете код, он возвращает следующий результат —
#() #(A B C) #(A B C D E) #(A B)
Векторы являются последовательностями, все функции последовательности применимы для векторов. Пожалуйста, обратитесь к главе последовательностей, для векторных функций.