Next: Vector Accessing from C, Previous: Vector Creation, Up: Vectors [Contents][Index]

`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 Vector Creation) 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* - C Function:
**scm_vector_fill_x***(vec, fill)* Store

`fill`in every position of`vec`. The value returned by`vector-fill!`

is unspecified.

- Scheme Procedure:
**vector-copy***vec* - C Function:
**scm_vector_copy***(vec)* Return a copy of

`vec`.

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

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

Next: Vector Accessing from C, Previous: Vector Creation, Up: Vectors [Contents][Index]