typestar

Desestructuración de vectores en Clojure

Separa por posición los puntos de una ruta y un par de coordenadas dentro de let.

;; Destructuring a vector binds names to positions from left to
;; right, and & gathers everything still unnamed into a sequence.
(def waypoints [:trailhead :bridge :ridge :summit])

(let [[start next-stop & later] waypoints]
  (println (format "start %s, then %s, %d to go"
                   (name start) (name next-stop) (count later))))

;; :as keeps a name for the whole vector while the parts stay bound.
(let [[lat lon :as fix] [45.52 -122.68]]
  (println (format "%.2f/%.2f from %d parts" lat lon (count fix))))

;; Nesting works at any depth, and _ marks a slot you do not need.
(def leg [[45.52 -122.68] [47.61 -122.33]])
(let [[[from-lat _] [to-lat _]] leg]
  (println (format "north by %.2f degrees" (- to-lat from-lat))))

Cómo funciona

  1. (let [[start next-stop & later] waypoints] nombra los dos primeros elementos y junta el resto en later.
  2. La vinculación [lat lon :as fix] parte un par de coordenadas mientras fix sigue siendo el vector entero.
  3. [[from-lat _] [to-lat _]] entra en un vector de vectores, y _ marca las longitudes que este código ignora.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
16
Caracteres a escribir
709
Tokens
115
Ritmo de tres estrellas
70 tpm

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

Escribe este fragmento

Paso 1 de 3 en Desestructuración; paso 19 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →