📅  最后修改于: 2023-12-03 15:17:24.306000             🧑  作者: Mango
在LISP编程语言中,向量也是一种数据结构,它和列表一样可以用来存储多个元素。但是和列表不同的是,向量中的元素是有序且可以随机访问的,而列表则是单向的。
在LISP中,我们使用#()
来定义一个向量。向量中的元素可以是任何LISP对象,如整数、符号、列表等。
; 定义一个有3个元素的向量
(setq my-vec #(10 "hello" (1 2 3)))
我们可以使用aref
函数来访问向量中的元素,传入向量和元素的下标即可。需要注意的是,LISP的下标是从0开始的。
; 访问向量中的第一个元素
(aref my-vec 0) ; 返回 10
; 访问向量中的第二个元素
(aref my-vec 1) ; 返回 "hello"
; 访问向量中的第三个元素
(aref my-vec 2) ; 返回 (1 2 3)
和列表一样,向量也是不可变的数据结构,即我们不能直接修改向量中的元素。如果需要修改元素,我们可以先创建一个新的向量,然后将需要修改的元素替换成新的值。
; 将第一个元素替换成20
(setq new-vec (copy-sequence my-vec))
(aset new-vec 0 20)
向量具有以下其它操作:
length
: 返回向量的长度。subseq
: 返回一个向量的子序列。make-array
: 创建一个指定长度的向量。; 返回向量的长度
(length my-vec) ; 返回3
; 返回从第二个元素到最后一个元素的子向量
(subseq my-vec 1) ; 返回("hello" (1 2 3))
; 创建一个长度为5的向量,并全部初始化为0
(make-array 5 :initial-element 0) ; 返回 #(0 0 0 0 0)
LISP中的向量和列表一样,是常用的数据结构之一。它的有序和随机访问的特点,使得它在某些场景下比列表更加适用。虽然向量是不可变的,但通过替换操作,我们仍然可以实现修改向量中元素的需求。