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)

Fill 指標

make-array函式允許建立一個可調整大小的向量。

函式fill-yiibaier引數跟蹤實際儲存在向量中的元素的數量。它的下一個位置,當新增元素的向量來填充的索引。

vector-push函式允許將元素新增到一個可調整大小的向量的結束。它增加了填充指標加1。

vector-pop函式返回最近推條目,由1遞減填充指標。

範例

建立一個名為main.lisp一個新的原始碼檔案,並在其中輸入如下程式碼:

(setq a (make-array 5 :fill-yiibaier 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)

向量是序列,所有序列函式是適用於向量。請參考序列章節,對向量函式。