- LISP 教程
- LISP - 首页
- LISP - 概述
- LISP - 环境
- LISP - 程序结构
- LISP - 基本语法
- LISP - 数据类型
- LISP - 宏
- LISP - 变量
- LISP - 常量
- LISP - 运算符
- LISP - 决策
- LISP - 循环
- LISP - 函数
- LISP - 谓词
- LISP - 数字
- LISP - 字符
- LISP - 数组
- LISP - 字符串
- LISP - 序列
- LISP - 列表
- LISP - 符号
- LISP - 向量
- LISP - 集合
- LISP - 树
- LISP - 哈希表
- LISP - 输入与输出
- LISP - 文件I/O
- LISP - 结构体
- LISP - 包
- LISP - 错误处理
- LISP - CLOS
- LISP 有用资源
- Lisp - 快速指南
- Lisp - 有用资源
- Lisp - 讨论
Lisp - 向量
向量是一维数组,因此是数组的子类型。向量和列表统称为序列。因此,我们之前讨论过的所有序列泛型函数和数组函数都适用于向量。
创建向量
vector 函数允许您创建具有特定值的固定大小的向量。它接受任意数量的参数,并返回包含这些参数的向量。
示例
创建一个名为 main.lisp 的新源代码文件,并在其中键入以下代码。
main.lisp
; create and assign a vector to v1 (setf v1 (vector 1 2 3 4 5)) ; create and assign a vector to v2 (setf v2 #(a b c d e)) ; create and assign a vector to v3 (setf v3 (vector 'p 'q 'r 's 't)) ; print v1 (write v1) ; terminate printing (terpri) ; print v2 (write v2) ; terminate printing (terpri) ; print v3 (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 的源代码文件,并在其中键入以下代码。
main.lisp
; create and assign an array of size 5 initilized with 0 values (setq a (make-array 5 :initial-element 0)) ; create and assign an array of size 5 initilized with 2 values (setq b (make-array 5 :initial-element 2)) ; loop for 5 times (dotimes (i 5) ; set an array values (setf (aref a i) i)) ; print a (write a) ;terminate printing (terpri) ; print b (write b) ; terminate printing (terpri)
输出
执行代码时,它返回以下结果:
#(0 1 2 3 4) #(2 2 2 2 2)
填充指针
**make-array** 函数允许您创建可调整大小的向量。
该函数的 **fill-pointer** 参数跟踪实际存储在向量中的元素数量。当您向向量添加元素时,它是下一个要填充的位置的索引。
**vector-push** 函数允许您将元素添加到可调整大小向量的末尾。它将填充指针加 1。
**vector-pop** 函数返回最近推送的项目并将填充指针减 1。
示例
更新名为 main.lisp 的源代码文件,并在其中键入以下代码。
main.lisp
; create and assign an array of size 5 initilized with 0 values (setq a (make-array 5 :fill-pointer 0)) ; print a (write a) ; add a to the vector a (vector-push 'a a) ; add b to the vector a (vector-push 'b a) ; add c to the vector a (vector-push 'c a) ; terminate printing (terpri) ; print vector a (write a) ; terminate printing (terpri) ; add d to the vector a (vector-push 'd a) ; add e to the vector a (vector-push 'e a) ;this will not be entered as the vector limit is 5 (vector-push 'f a) ; print vector a (write a) ; terminate printing (terpri) ; remove last pushed element (vector-pop a) ; remove last pushed element (vector-pop a) ; remove last pushed element (vector-pop a) ; print vector (write a)
输出
执行代码时,它返回以下结果:
#() #(A B C) #(A B C D E) #(A B)
向量是序列,所有序列函数都适用于向量。请参阅序列章节,了解向量函数。
广告