配列に要素を追加する - lisp-cookbook-ja/common-lisp GitHub Wiki
配列に要素を追加する
フィルポインタ付きでベクタを作成すると後に要素を追加することが可能です。 追加には、 vector-push や、 vector-push-extend を使用します。 リストと違い要素は末尾に追加されて行きます。
(let ((a (make-array 10 :adjustable T :fill-pointer 0)))
(vector-push 1 a)
(vector-push 2 a)
(vector-push 3 a)
a)
;=> #(1 2 3)
先頭に追加する場合 vector-push-frontという関数を自作 FIXME ;; 他にもっと良い方法がある気がする…。
(defun vector-push-front (new-el array)
(incf (fill-pointer array))
(setf (subseq array 1) (subseq array 0)
(aref array 0) new-el))
(let ((a (make-array 1 :adjustable T :fill-pointer 0)))
(vector-push 1 a)
(vector-push 2 a)
(vector-push 3 a)
(vector-push-front 0 a)
a)
;=> #(0 1 2 3)