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.
|