typestar

case y condp en Clojure

Los colores de las líneas del metro salen de case sobre literales; el gentío, de condp.

;; case dispatches on literal constants and never evaluates them
(defn line-color [line]
  (case line
    ("A" "C" "E") "blue"
    ("1" "2" "3") "red"
    "G" "light green"
    "unknown line"))

;; the trailing expression is the default; without one a miss throws
(println (line-color "C") (line-color "G") (line-color "Q"))

;; condp holds a predicate and a right-hand argument across the clauses
(defn crowding [riders]
  (condp <= riders
    900 "crush"
    500 "heavy"
    "light"))

(println (map crowding [1200 640 40]))

Cómo funciona

  1. line-color agrupa literales en listas como ("A" "C" "E") para que varias claves compartan resultado.
  2. El "unknown line" final es el valor por defecto; sin él, un valor sin coincidencia lanza error.
  3. crowding usa condp <= riders, así que la cláusula 900 "crush" dispara cuando 900 no supera al conteo.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
19
Caracteres a escribir
494
Tokens
73
Ritmo de tres estrellas
75 tpm

Al ritmo de tres estrellas de 75 tokens por minuto, este intento toma unos 58 segundos.

Escribe este fragmento

Paso 3 de 3 en Flujo y qué cuenta como verdadero; paso 12 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →