Plantillas con backquote en Lisp
La comilla inversa arma una plantilla de lista; la coma y la coma-arroba llenan los huecos.
;; Backquote builds list templates; comma and comma-at fill the holes.
(defvar *host* "db-01")
(defvar *ports* (list 5432 5433))
;; Plain quote keeps every symbol literal, holes and all.
(defvar *literal* '(connect host ports))
;; Comma evaluates one form, comma-at splices a whole list into place.
(defvar *filled* `(connect ,*host* ,@*ports*))
;; Templates nest, so one backquoted form can lay out a whole plan.
(defvar *plan* `((step check ,*host*) (step open ,@*ports*)))
(format t "literal: ~s~%filled: ~s~%plan: ~s~%" *literal* *filled* *plan*)
Cómo funciona
'(connect host ports)deja literal cada símbolo, así que no se evalúa nada.- Tras el backquote,
,*host*mete un valor en(connect ,*host* ,@*ports*)y,@*ports*empalma una lista entera. - Las plantillas anidan, así que
*plan*arma una lista de listas de dos pasos con esas mismas dos variables.
Palabras clave y builtins usados aquí
defvarformatlistopenstep
El intento, en números
- Líneas
- 15
- Caracteres a escribir
- 555
- Tokens
- 67
- Ritmo de tres estrellas
- 65 tpm
Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 62 segundos.
Paso 3 de 3 en Format y macros; paso 24 de 27 en Fundamentos del lenguaje.