Funciones para manejo de vectores

El lenguaje de programación Scheme tiene diferentes funciones que permiten manipular un vector, mediante ellas se puede crear un vector, acceder a una posición del vector, calcular su tamaño, modificar su contenido, etc.

 Make-vector: Retorna un vector de n posiciones inicializadas con un mismo valor.
                ej:  (define caracteres (make-vector 8 #\s))
Igualmente, se puede crear un vector con elementos de otros tipos de datos, por ejemplo, un vector de 8 posiciones inicializadas con el carácter s.

Vector: Retorna un vector compuesto por los parámetros enviados en su llamado.
                ej:  (define fecha (vector 2 "Junio" 1996))
Esta función también se puede combinar con define para asignar el valor retornado por la función a una variable, por ejemplo, se va a crear un vector que guarde la fecha de nacimiento de una persona, (2 de Junio de 2006), una vez creado se le asignará el nombre fecha con define.

 list-vector: Crea un vector inicializado con los elementos que contenga una lista.
   ej: Primero se define la lista de emisoras denominada lst-emisoras:      
            (define lst-emisoras '("RCN" "Caracol" "RadioActiva" "88.1"))

Posteriormente se crea el vector v-emisoras a partir de la lista definida anteriormente así:

(define v-emisoras (list-vector lst-emisoras))
vector-length: Retorna el número de posiciones que contiene el vector.
                                ej: (vector-length vector)

Si se tiene el vector imp compuesto por los números impares entre 0 y 9, el valor que retorna la función vector-length es 5.

imp

  1
3
 5
 7
  9

                                                  0           1           2           3          4
Para obtener el total de elementos del vector imp se debe escribir:

(vector-length imp)

Esta expresión puede utilizarse de diferentes formas, por ejemplo:

a. Se puede asignar su retorno a una variable
(define num-elementos (vector-length imp))
En este caso el valor 5 es asignado a la variable numelementos.

b. Se puede utilizar en una condición o en un ciclo

(if (< (vector-length imp) 3)
(display "El vector tiene menos de tres elementos")
(display "El vector tiene 3 o más elementos")
                                               )

En este ejemplo se pregunta si la longitud del vector imp es menor que 3, por verdadero muestra por pantalla: “El vector tiene menos de tres elementos”, por falso muestra: “El vector tiene 3 o más elementos”.

c. Se puede utilizar para mostrar directamente el total de elementos de un vector:

(display (vector-length imp))

Esta línea muestra en pantalla el valor 5.

d. Se puede utilizar como parámetro en el llamado a una función o procedimiento:

(func (vector-length imp))

Esta expresión consiste en llamar a la función func, enviándole como parámetro la longitud de imp.

 vector-ref: Retorna el contenido de una posición del vector.
        La sintaxis de esta función es:
        (vector-ref vector k)

       Donde k es la posición del vector del cual se obtiene su contenido.
              
               ej: (define celulares #(Nokia Samsung Motorola Alcatel SonyEricson LG))

Pero, si lo que se quiere es mostrar solo uno de los elementos, por ejemplo Alcatel, se debe mostrar la posición 3 del vector de la siguiente manera:

(display (vector-ref celulares 3))

Esta línea muestra:

Alcatel

Para mostrar todos los elementos del vector, accediendo uno a uno a sus elementos, se puede proceder de tres formas:
1. Hacer tantos display como posiciones tenga el vector,
2. Hacer un ciclo que en cada interacción imprima una posición diferente
3. Hacer un procedimiento recursivo que en cada llamado muestre un elemento del vector.

vector-set!: Almacena un valor en una posición del vector.
                ej: (define precios (vector 45000 75000 185000 45000 25000))

Como los precios se modifican constantemente, es posible que se desee cambiar alguno de ellos, para lograrlo, es necesario utilizar la función vector-set!, por ejemplo, para modificar el valor 185000 almacenado en la posición 2 del vector por 200000, en esta caso la instrucción es:

(vector-set! precios 2 200000)

Con lo cual el vector queda así:

(vector 45000 75000 200000 45000 25000)

También se puede modificar el valor de una posición por el valor digitado por el usuario en tiempo de ejecución, para ello, se utiliza la función read de la siguiente manera:

(vector-set! precios 2 (read))

 vector-fill!: Almacena un valor en cada posición del vector.
                                ej: La expresión:
                (define vec #(1 6 68 2 6 96))

vec

 1
 6
 68
  2
  6
  96

                                       0       1         2        3        4        5
    
    La expresión:
                  (vector-fill! vec 0)
   
   deja el vector así:

vec

  0
 0
  0
  0
  0
  0

                                               0       1        2        3       4        5

vector? : Determina si un objeto es un vector.
                               La sintaxis de esta función es
(vector? obj)
       Donde obj puede ser cualquier tipo de elemento, en el caso de ser un vector
       la función retorna #t, de lo contrario retorna #f.

ej: (define vec #("Pasto" "Popayán" "Cali" "Bogotá"))   #t   ; Verdadero
     (define x 10)    #f                             ;falso