配列に要素を追加する - 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)