zl程序教程

您现在的位置是:首页 >  后端

当前栏目

clisp 的集合

2023-09-14 08:58:45 时间

集合

将多个值收集到单一对象的标准数据类型
集合基本可归结为一个整数索引的数组类型

向量

可以把向量比作一维数组
定向向量:指定了length
变长向量:长度随着元素的增加,减少而变化

(vector 1 2 3)   ; #(1 2 3)
#(1 2 3) ; #(1 2 3)

;; (make-array list) list的长度表示多少维度, list索引对应的元素表示对应维度的长度,
(make-array '(3) :initial-element 1) ; #(1 1 1)

;; 这不是向量而是数组
(make-array '(4 2)) ;#2A((NIL NIL) (NIL NIL) (NIL NIL) (NIL NIL))

:fill-pointer 定向向量

创建带有填充指针的向量

(make-array 5 :fill-pointer 0) ; #()

(let ((arr (make-array 3 :fill-pointer 0)))
  (vector-push 'a arr)
  (vector-push 'b arr)
  (vector-push 'c arr)
  (vector-push 'd arr)
  (print arr)) ; #(A B C) 没有D,应为固定了长度为3
(vector-pop arr) ; 取出arr最后一个,并改变arr

:adjustable t 变长向量

(let ((arr (make-array 3 
		       :fill-pointer 0
		       :adjustable t))) ; :adjustable t 申明变长向量
  (vector-push 'a arr)
  (vector-push 'b arr)
  (vector-push 'c arr)
  (vector-push-extend 'd arr)  ; 自动扩展数组
  (print arr)) ; #(A B C D)

:element-type 'string 子类型

(let* ((arr (make-array 1
			:fill-pointer 0
			:adjustable t
			:element-type 'string)))
  (vector-push-extend "ajanuw" arr)
  (vector-push-extend "alone" arr)
  (vector-push-extend "venom" arr)
  (print arr)) ; #("ajanuw" "alone" "venom")