typestar

Despacho con case en Lisp

case elige una rama comparando un valor con claves literales mediante eql.

;; case tests keys with eql, so the clauses stay bare symbols
(defun unit-label (measure)
  (case measure
    (celsius "degrees C")
    (millibar "mb")
    ((meter meters) "m above sea level")
    (otherwise "unrecognized unit")))

;; one clause can list several keys, and otherwise catches the rest
(defun log-reading (measure value)
  (format t "~a ~a~%" value (unit-label measure)))

(log-reading 'celsius 21)
(log-reading 'millibar 1013)
(log-reading 'meters 348)
(log-reading 'furlong 2)

Cómo funciona

  1. unit-label hace coincidir los símbolos celsius y millibar con sus unidades impresas.
  2. La cláusula ((meter meters) "m above sea level") acepta cualquiera de las dos formas de una clave.
  3. otherwise atrapa lo que no está listado, que es donde cae (log-reading 'furlong 2).

Palabras clave y builtins usados aquí

El intento, en números

Líneas
16
Caracteres a escribir
472
Tokens
70
Ritmo de tres estrellas
80 tpm

Al ritmo de tres estrellas de 80 tokens por minuto, este intento toma unos 52 segundos.

Escribe este fragmento

Paso 2 de 3 en Control de flujo; paso 8 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →