LISP - 向量
-
简述
向量是一维数组,因此是数组的子类型。向量和列表统称为序列。因此,我们目前讨论的所有序列泛型函数和数组函数都适用于向量。 -
创建向量
矢量函数允许您制作具有特定值的固定大小的矢量。它接受任意数量的参数并返回包含这些参数的向量。示例 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
创建一个名为 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。例子
创建一个名为 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)
向量是序列,所有序列函数都适用于向量。有关向量函数,请参阅序列章节。