Common Lisp the Language, 2nd Edition

Next: Strings Up: Arrays Previous: Arrays

## 2.5.1. Vectors

One-dimensional arrays are called vectors in Common Lisp and constitute the type `vector` (which is therefore a subtype of `array`). Vectors and lists are collectively considered to be sequences. They differ in that any component of a one-dimensional array can be accessed in constant time, whereas the average component access time for a list is linear in the length of the list; on the other hand, adding a new element to the front of a list takes constant time, whereas the same operation on an array takes time linear in the length of the array.

A general vector (a one-dimensional array that can have any data object as an element but that has no additional paraphernalia) can be notated by notating the components in order, separated by whitespace and surrounded by `#(` and `)`. For example:

    #(a b c)                    ;A vector of length 3
    #()                         ;An empty vector
    #(2 3 5 7 11 13 17 19 23 29 31 37 41 43 47)
                                ;A vector containing the primes below 50

Note that when the function `read` parses this syntax, it always constructs a simple general vector.

Rationale: Many people have suggested that brackets be used to notate vectors, as `[a b c]` instead of `#(a b c)`. This notation would be shorter, perhaps more readable, and certainly in accord with cultural conventions in other parts of computer science and mathematics. However, to preserve the usefulness of the user-definable macro-character feature of the function `read`, it is necessary to leave some characters to the user for this purpose. Experience in MacLisp has shown that users, especially implementors of languages for use in artificial intelligence research, often want to define special kinds of brackets. Therefore Common Lisp avoids using brackets and braces for any syntactic purpose.

Implementations may provide certain specialized representations of arrays for efficiency in the case where all the components are of the same specialized (typically numeric) type. All implementations provide specialized arrays for the cases when the components are characters (or rather, a special subset of the characters); the one-dimensional instances of this specialization are called strings. All implementations are also required to provide specialized arrays of bits, that is, arrays of type `(array bit)`; the one-dimensional instances of this specialization are called bit-vectors.

Next: Strings Up: Arrays Previous: Arrays