59 lines
2.0 KiB
Racket
59 lines
2.0 KiB
Racket
#lang scribble/doc
|
|
@require[scribble/manual]
|
|
@require[scribble/eval]
|
|
@require["guide-utils.ss"]
|
|
|
|
@title[#:tag "vectors"]{Vectors}
|
|
|
|
A @defterm{vector} is a fixed-length array of arbitarary
|
|
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 @litchar{#} and the length
|
|
of the vector. The vector length is optional for a vector as an
|
|
expression. 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.
|
|
|
|
@refdetails/gory["parse-vector"]{the syntax of vectors}
|
|
|
|
@examples[
|
|
(eval:alts #, @schemevalfont{#("a" "b" "c")} #("a" "b" "c"))
|
|
(eval:alts #, @schemevalfont{#(name (that tune))} #(name (that tune)))
|
|
(vector-ref #("a" "b" "c") 1)
|
|
(vector-ref #(name (that tune)) 1)
|
|
]
|
|
|
|
When the last @math{n} vector elements of a vector are the same value
|
|
(as determined by @scheme[eq?]), then the last @math{n-1} instances
|
|
are omitted from the printed form. The vector length shown after the
|
|
leading @litchar{#} effectively indicates when repeated trailing
|
|
elements are omitted. The same conventions apply for vectors as
|
|
expressions.
|
|
|
|
@examples[
|
|
(define v (make-vector 100 "."))
|
|
v
|
|
(vector-set! v 1 "!")
|
|
v
|
|
(vector-ref #10("." "?") 8)
|
|
]
|
|
|
|
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
|
|
@scheme[list->vector] and @scheme[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 @scheme[fold-for], which recognize vectors as
|
|
well as lists.
|
|
|
|
@examples[
|
|
(list->vector (map string-titlecase
|
|
(vector->list #("three" "blind" "mice"))))
|
|
]
|
|
|
|
@refdetails["vectors"]{vectors and vector procedures}
|