Node:Vector Creation, Next:Vector Accessors, Previous:Vector Syntax, Up:Vectors
Instead of creating a vector implicitly by using the read syntax just
described, you can create a vector dynamically by calling one of the
vector
and list->vector
primitives with the list of Scheme
values that you want to place into a vector. The size of the vector
thus created is determined implicitly by the number of arguments given.
vector . l | Scheme Procedure |
list->vector l | Scheme Procedure |
scm_vector (l) | C Function |
Return a newly allocated vector composed of the
given arguments. Analogous to list .
(vector 'a 'b 'c) => #(a b c) |
(As an aside, an interesting implementation detail is that the Guile
reader reads the #(...)
syntax by reading everything but the
initial #
as a list, and then passing the list that
results to list->vector
. Notice how neatly this fits with the
similarity between the read (and print) syntaxes for lists and vectors.)
The inverse operation is vector->list
:
vector->list v | Scheme Procedure |
scm_vector_to_list (v) | C Function |
Return a newly allocated list composed of the elements of v.
(vector->list '#(dah dah didah)) => (dah dah didah) (list->vector '(dididit dah)) => #(dididit dah) |
To allocate a vector with an explicitly specified size, use
make-vector
. With this primitive you can also specify an initial
value for the vector elements (the same value for all elements, that
is):
make-vector k [fill] | Scheme Procedure |
scm_make_vector (k, fill) | C Function |
Return a newly allocated vector of k elements. If a second argument is given, then each position is initialized to fill. Otherwise the initial contents of each position is unspecified. |
To check whether an arbitrary Scheme value is a vector, use the
vector?
primitive:
vector? obj | Scheme Procedure |
scm_vector_p (obj) | C Function |
Return #t if obj is a vector, otherwise return
#f .
|