当前位置: 首页 > 文档资料 > LISP 中文教程 >

Vectors

优质
小牛编辑
129浏览
2023-12-01

向量是一维数组,因此是数组的子类型。 矢量和列表统称为序列。 因此,到目前为止我们讨论过的所有序列泛型函数和数组函数都适用于向量。

创建矢量

矢量函数允许您使用特定值制作固定大小的矢量。 它接受任意数量的参数并返回包含这些参数的向量。

例子1 (Example 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中未定义修改它们。 因此,对于编程,应始终使用vector函数或更通用的函数make-array来创建计划修改的向量。

make-array函数是创建矢量的更通用的方法。 您可以使用aref函数访问向量元素。

例子2 (Example 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参数跟踪实际存储在向量中的元素数。 它是向向量添加元素时要填充的下一个位置的索引。

vector-push功能允许您将元素添加到可调整大小的矢量的末尾。 它将填充指针增加1。

vector-pop函数返回最近推送的项目,并将填充指针递减1。

例子 (Example)

创建一个名为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)

作为序列的载体,所有序列功能都适用于载体。 有关矢量函数,请参阅序列章节。