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
(let [[start next-stop & later] waypoints]nombra los dos primeros elementos y junta el resto enlater.- La vinculación
[lat lon :as fix]parte un par de coordenadas mientrasfixsigue siendo el vector entero. [[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í
countdefletnameprintln
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.
Paso 1 de 3 en Desestructuración; paso 19 de 27 en Fundamentos del lenguaje.