Arrays and Vectors

Strings are vectors of characters, so the sequence functions (Module 13) work on them too.

(defparameter *v* (make-array 5 :initial-element 0))   ; #(0 0 0 0 0)
(setf (aref *v* 0) 42)
(aref *v* 0)                               ; 42
(vector 1 2 3)                             ; #(1 2 3)
#(1 2 3)                                   ; literal vector (don't mutate literals)
(length #(1 2 3))                          ; 3
(svref (vector 1 2 3) 1)                   ; 2 (simple-vector access)

;; Adjustable vectors with fill pointers (dynamic arrays)
(defparameter *dyn* (make-array 0 :adjustable t :fill-pointer 0))
(vector-push-extend 'a *dyn*)
(vector-push-extend 'b *dyn*)
*dyn*                                      ; #(A B)
(vector-pop *dyn*)                         ; B
(fill-pointer *dyn*)                       ; 1

;; Multidimensional arrays
(defparameter *grid* (make-array '(3 3) :initial-element 0))
(setf (aref *grid* 1 1) 5)
(array-dimensions *grid*)                  ; (3 3)
(array-dimension *grid* 0)                 ; 3
(array-total-size *grid*)                  ; 9
(make-array '(2 2) :initial-contents '((1 2) (3 4)))

;; Specialized arrays (compact and fast)
(make-array 10 :element-type 'double-float :initial-element 0d0)
(make-array 8 :element-type 'bit :initial-element 0)
…