typestar

Macros de encadenamiento en Clojure

Un pipeline de elevaciones escrito anidado, luego con ->>, y -> sobre un mapa.

(def elevations [820 1450 610 1980 1230])

;; nested calls read inside out: the last thing written happens first
(println (apply + (take 3 (sort > (filter #(> % 700) elevations)))))

;; ->> threads the value into the last slot, which suits seq functions
(println (->> elevations
              (filter #(> % 700))
              (sort >)
              (take 3)
              (apply +)))

;; -> threads into the first slot, which suits maps and assoc/update
(def trail {:name "ridge loop" :miles 6.2})
(println (-> trail
             (assoc :gain 1450)
             (update :miles + 0.8)
             (assoc :steep? true)))

Cómo funciona

  1. El (apply + (take 3 (sort > (filter #(> % 700) elevations)))) anidado se lee de adentro hacia afuera.
  2. ->> encadena el valor en la última ranura, así (filter #(> % 700)) y (take 3) quedan en orden de lectura.
  3. -> encadena en la primera ranura y deja que (assoc :gain 1450) y (update :miles + 0.8) recorran trail.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
18
Caracteres a escribir
525
Tokens
100
Ritmo de tres estrellas
70 tpm

Al ritmo de tres estrellas de 70 tokens por minuto, este intento toma unos 86 segundos.

Escribe este fragmento

Paso 3 de 3 en Secuencias; paso 15 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →