1 Welcome to PLT Scheme
2 Scheme Essentials
3 Built-In Datatypes
4 Expressions and Definitions
5 Programmer-Defined Datatypes
6 Modules
7 Contracts
8 Input and Output
9 Regular Expressions
10 Exceptions and Control
11 Iterations and Comprehensions
12 Pattern Matching
13 Classes and Objects
14 Units (Components)
15 Reflection and Dynamic Evaluation
16 Macros
17 Performance
18 Running and Creating Executables
19 Compilation and Configuration
20 More Libraries
Bibliography
Index
Version: 4.0.2

 

3.9 Vectors

A vector is a fixed-length array of arbitrary values. Unlike a list, a vector supports constant-time access and update of its elements.

A vector prints similar to a list – as a parenthesized sequence of its elements – but a vector is prefixed with #. For a vector as an expression, an optional length can be supplied. Also, a vector as an expression implicitly quotes the forms for its content, which means that identifiers and parenthesized forms in a vector constant represent symbols and lists.

Reading Vectors in Reference: PLT Scheme documents the fine points of the syntax of vectors.

Examples:

  > #("a" "b" "c")

  #("a" "b" "c")

  > #(name (that tune))

  #(name (that tune))

  > (vector-ref #("a" "b" "c") 1)

  "b"

  > (vector-ref #(name (that tune)) 1)

  (that tune)

Like strings, a vector is either mutable or immutable, and vectors written directly as expressions are immutable.

Vector can be converted to lists and vice-versa via list->vector and vector->list; such conversions are particularly useful in combination with predefined procedures on lists. When allocating extra lists seems too expensive, use consider using looping forms like fold-for, which recognize vectors as well as lists.

Examples:

  > (list->vector (map string-titlecase

                       (vector->list #("three" "blind" "mice"))))

  #("Three" "Blind" "Mice")

Vectors in Reference: PLT Scheme provides more on vectors and vector procedures.