typestar

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

  1. (assoc 206 *area-codes*) devuelve el cons que coincide, así que cdr da la ciudad; sin coincidencia, nil.
  2. (list :title "Dune" :year 1965 :pages 412) es un plist plano que (getf *book* :year) lee.
  3. (getf *book* :edition "first") toma un valor por defecto; el comentario contrasta registros fijos con tablas largas.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 2 de 3 en Colecciones; paso 17 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →