📅  最后修改于: 2020-11-03 07:16:16             🧑  作者: Mango
向量是一维数组,因此是数组的子类型。向量和列表统称为序列。因此,到目前为止,我们讨论的所有序列泛型函数和数组函数都适用于向量。
向量函数可让您制作具有特定值的固定大小的向量。它接受任意数量的参数,并返回包含这些参数的向量。
创建一个名为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中未定义对其进行修改。因此,在编程时,应始终使用vector函数或更通用的make-array函数来创建计划修改的向量。
make-array函数是创建矢量的更通用的方法。您可以使用aref函数访问矢量元素。
创建一个名为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)
向量是序列,所有序列函数都适用于向量。有关矢量函数,请查阅序列章节。