Átomos y swap! en Clojure
Lleva en átomos el conteo de visitas y el registro de recepción, y actualiza los dos con funciones comunes.
;; An atom holds one value that is allowed to change over time.
;; swap! applies a function to the current value and stores the
;; result, so the update stays a plain function call.
(def visitors (atom 0))
(swap! visitors inc)
(swap! visitors + 10)
(println (format "visitors %d" @visitors))
;; @ is deref: it reads the value in place without changing it.
(def register (atom {:desk "Ida" :guests []}))
(swap! register update :guests conj "Perez")
(swap! register update :guests conj "Okoye")
(println (format "%s logged %d" (:desk @register)
(count (:guests @register))))
;; reset! replaces the value outright instead of deriving a new one.
(reset! visitors 0)
(println (format "visitors %d" @visitors))
Cómo funciona
(swap! visitors inc)y(swap! visitors + 10):swap!pasa el valor actual a una función y los extras van detrás.(swap! register update :guests conj "Perez")rehace un mapa anidado: la función puede devolver cualquier valor.@visitorses deref: lee el átomo, y(reset! visitors 0)reemplaza el valor en vez de derivarlo.
Palabras clave y builtins usados aquí
conjcountdefprintln
El intento, en números
- Líneas
- 19
- Caracteres a escribir
- 707
- Tokens
- 97
- Ritmo de tres estrellas
- 70 tpm
Al ritmo de tres estrellas de 70 tokens por minuto, este intento toma unos 83 segundos.
Paso 1 de 3 en Estado y records; paso 22 de 27 en Fundamentos del lenguaje.