typestar

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

  1. '(connect host ports) deja literal cada símbolo, así que no se evalúa nada.
  2. Tras el backquote, ,*host* mete un valor en (connect ,*host* ,@*ports*) y ,@*ports* empalma una lista entera.
  3. 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í

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.

Escribe este fragmento

Paso 3 de 3 en Format y macros; paso 24 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →