Vectores y arreglos en Lisp
Lee temperaturas diarias de un literal #(...) y escribe en un arreglo creado con make-array.
;; #(...) reads as a simple vector, and AREF indexes it from zero.
(defvar *highs* #(61 64 58 72 70))
(defvar *monday* (aref *highs* 0))
(defvar *thursday* (aref *highs* 3))
;; MAKE-ARRAY builds one at run time; :INITIAL-ELEMENT fills it, and
;; SETF AREF writes a slot. Never write into a #(...) literal.
(defvar *lows* (make-array 5 :initial-element 48))
(setf (aref *lows* 3) 55)
;; LENGTH and ELT accept any sequence, so the same call reads a
;; vector, a list, or a string.
(format t "~a days, monday ~a, thursday ~a/~a~%"
(length *highs*) *monday* *thursday* (aref *lows* 3))
(format t "~a ~a ~a~%" (elt *highs* 1) (elt '(:rain :sun) 1)
(elt "cloudy" 0))
Cómo funciona
(aref *highs* 3)indexa desde cero el vector literal.(make-array 5 :initial-element 48)crea un vector escribible que(setf (aref *lows* 3) 55)actualiza.lengthyeltsirven en secuencias:(elt '(:rain :sun) 1)y(elt "cloudy" 0)leen una lista y una cadena.
Palabras clave y builtins usados aquí
arefdefvareltformatlengthsetf
El intento, en números
- Líneas
- 16
- Caracteres a escribir
- 662
- Tokens
- 93
- Ritmo de tres estrellas
- 75 tpm
Al ritmo de tres estrellas de 75 tokens por minuto, este intento toma unos 74 segundos.
Paso 3 de 3 en Colecciones; paso 18 de 27 en Fundamentos del lenguaje.