Previous: Vector Creation, Up: Vectors


22.3.3 Accessing and Modifying Vector Contents

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.

— Scheme Procedure: vector-ref vector k
— C Function: scm_vector_ref vector k

Return the contents of position k of vector. k must be a valid index of vector.

          (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

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! vector k obj
— C Function: scm_vector_set_x vector k obj

Store obj in position k of vector. k must be a valid index of vector. 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")

— Scheme Procedure: vector-fill! vector obj
— C Function: scm_vector_fill_x (vector, obj)

Store obj in every element of vector. (r5rs)

— Scheme Procedure: vector-move-left! vec1 start1 end1 vec2 start2
— C Function: scm_vector_move_left_x (vec1, start1, end1, vec2, start2)

Vector version of substring-move-left!.

— Scheme Procedure: vector-move-right! vec1 start1 end1 vec2 start2
— C Function: scm_vector_move_right_x (vec1, start1, end1, vec2, start2)

Vector version of substring-move-right!.