`vector-length`

and `vector-ref`

return information about a
given vector, respectively its size and the elements that are contained
in the vector.

- Scheme Procedure:
**vector-length**`vector`¶ - C Function:
**scm_vector_length**`(vector)`¶ Return the number of elements in

`vector`as an exact integer.

- C Function:
`size_t`

**scm_c_vector_length**`(SCM vec)`

¶ Return the number of elements in

`vec`as a`size_t`

.

- Scheme Procedure:
**vector-ref**`vec k`¶ - C Function:
**scm_vector_ref**`(vec, k)`¶ Return the contents of position

`k`of`vec`.`k`must be a valid index of`vec`.(vector-ref #(1 1 2 3 5 8 13 21) 5) ⇒ 8 (vector-ref #(1 1 2 3 5 8 13 21) (let ((i (round (* 2 (acos -1))))) (if (inexact? i) (inexact->exact i) i))) ⇒ 13

- C Function:
`SCM`

**scm_c_vector_ref**`(SCM vec, size_t k)`

¶ Return the contents of position

`k`(a`size_t`

) of`vec`.

A vector created by one of the dynamic vector constructor procedures (see Dynamic Vector Creation and Validation) can be modified using the following procedures.

*NOTE:* According to R5RS, it is an error to use any of these
procedures on a literally read vector, because such vectors should be
considered as constants. Currently, however, Guile does not detect this
error.

- Scheme Procedure:
**vector-set!**`vec k obj`¶ - C Function:
**scm_vector_set_x**`(vec, k, obj)`¶ Store

`obj`in position`k`of`vec`.`k`must be a valid index of`vec`. The value returned by ‘`vector-set!`’ is unspecified.(let ((vec (vector 0 '(2 2 2 2) "Anna"))) (vector-set! vec 1 '("Sue" "Sue")) vec) ⇒ #(0 ("Sue" "Sue") "Anna")

- C Function:
`void`

**scm_c_vector_set_x**`(SCM vec, size_t k, SCM obj)`

¶ Store

`obj`in position`k`(a`size_t`

) of`vec`.

- Scheme Procedure:
**vector-fill!**`vec fill [start [end]]`¶ - C Function:
**scm_vector_fill_x**`(vec, fill)`¶ Store

`fill`in every position of`vec`in the range [`start`...`end`).`start`defaults to 0 and`end`defaults to the length of`vec`.The value returned by

`vector-fill!`

is unspecified.

- Scheme Procedure:
**vector-copy**`vec [start [end]]`¶ - C Function:
**scm_vector_copy**`(vec)`¶ Returns a freshly allocated vector containing the elements of

`vec`in the range [`start`...`end`).`start`defaults to 0 and`end`defaults to the length of`vec`.

- Scheme Procedure:
**vector-copy!**`dst at src [start [end]]`¶ Copy the block of elements from vector

`src`in the range [`start`...`end`) into vector`dst`, starting at position`at`.`at`and`start`default to 0 and`end`defaults to the length of`src`.It is an error for

`dst`to have a length less than`at`+ (`end`-`start`).The order in which elements are copied is unspecified, except that if the source and destination overlap, copying takes place as if the source is first copied into a temporary vector and then into the destination.

The value returned by

`vector-copy!`

is unspecified.

- Scheme Procedure:
**vector-move-left!**`vec1 start1 end1 vec2 start2`¶ - C Function:
**scm_vector_move_left_x**`(vec1, start1, end1, vec2, start2)`¶ Copy elements from

`vec1`, positions`start1`to`end1`, to`vec2`starting at position`start2`.`start1`and`start2`are inclusive indices;`end1`is exclusive.`vector-move-left!`

copies elements in leftmost order. Therefore, in the case where`vec1`and`vec2`refer to the same vector,`vector-move-left!`

is usually appropriate when`start1`is greater than`start2`.The value returned by

`vector-move-left!`

is unspecified.

- Scheme Procedure:
**vector-move-right!**`vec1 start1 end1 vec2 start2`¶ - C Function:
**scm_vector_move_right_x**`(vec1, start1, end1, vec2, start2)`¶ Copy elements from

`vec1`, positions`start1`to`end1`, to`vec2`starting at position`start2`.`start1`and`start2`are inclusive indices;`end1`is exclusive.`vector-move-right!`

copies elements in rightmost order. Therefore, in the case where`vec1`and`vec2`refer to the same vector,`vector-move-right!`

is usually appropriate when`start1`is less than`start2`.The value returned by

`vector-move-right!`

is unspecified.