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