Alists y plists en Lisp
Busca un código de área en un alist y un campo en un plist, y dice cuándo conviene cada forma.
;; An association list is a list of key/value conses, and ASSOC hands
;; back the first pair whose key matches.
(defvar *area-codes*
'((503 . "Portland") (206 . "Seattle") (415 . "San Francisco")))
(defvar *city* (cdr (assoc 206 *area-codes*)))
(defvar *missing* (assoc 999 *area-codes*))
;; A property list is a flat run of alternating keys and values that
;; GETF reads. Plists suit small records with fixed fields; alists
;; suit longer tables and keys that are not keywords.
(defvar *book* (list :title "Dune" :year 1965 :pages 412))
(defvar *year* (getf *book* :year))
(defvar *edition* (getf *book* :edition "first"))
(format t "206 is ~a, 999 is ~a~%" *city* *missing*)
(format t "~a (~a), ~a edition~%" (getf *book* :title) *year* *edition*)
Cómo funciona
(assoc 206 *area-codes*)devuelve el cons que coincide, así quecdrda la ciudad; sin coincidencia, nil.(list :title "Dune" :year 1965 :pages 412)es un plist plano que(getf *book* :year)lee.(getf *book* :edition "first")toma un valor por defecto; el comentario contrasta registros fijos con tablas largas.
Palabras clave y builtins usados aquí
assoccdrdefvarformatgetflist
El intento, en números
- Líneas
- 17
- Caracteres a escribir
- 752
- Tokens
- 99
- Ritmo de tres estrellas
- 70 tpm
Al ritmo de tres estrellas de 70 tokens por minuto, este intento toma unos 85 segundos.
Paso 2 de 3 en Colecciones; paso 17 de 27 en Fundamentos del lenguaje.