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
unit-labelhace coincidir los símboloscelsiusymillibarcon sus unidades impresas.- La cláusula
((meter meters) "m above sea level")acepta cualquiera de las dos formas de una clave. otherwiseatrapa lo que no está listado, que es donde cae(log-reading 'furlong 2).
Palabras clave y builtins usados aquí
casedefunformat
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.
Paso 2 de 3 en Control de flujo; paso 8 de 27 en Fundamentos del lenguaje.