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)
…