[BONUS]
doseqdotimesEn Clojure, podemos decir que cada estructura de datos es una secuencia. Hasta ahora, aprendimos sobre
vectorymap, ambas de las cuales son secuencias. String también es una secuencia. Cuando algo es seq-uenciable, es una secuencia.
first para verificar secuencias Si algo es seq-uenciable, aplicando
firstobtenemos el primer elemento de la secuencia. Ésta es una buena forma de probar si algo es o no es una secuencia.
first(turtle-names)
;=> [:trinity :neo :oracle :cypher] ; vector
(first (turtle-names))
;=> :trinity ; primer elemento
(:trinity (state))
;=> {:x 0, :y 0, :angle 90, :color [30 30 30]} ; map
(first (:trinity (state)))
[:x 0] ; primer elemento
(first "Hello, World!") ; string
;=> \H ; primer elemento
(first :trinity) ; la palabra clave no es seq-uenciable
;=> IllegalArgumentException Don't know how to create ISeq from:
clojure.lang.Keyword clojure.lang.RT.seqFrom (RT.java:528)
Clojure es muy bueno para iterar sobre una secuencia. Hay muchas funciones que interactúan con secuencias. Por ejemplo,
doseq,dotimes,for,loop,doall, odorun.Ya vimos las funciones
mapyreduceen la sección “Funciones cuyos parámetros son otras funciones”. Éstas también son funciones para secuencias.
doseq
La función
doseq(“hacer una secuencia” - do a sequence) es una de las funciones frecuentemente utilizadas para secuencias, y funciona de manera similar a la funciónmap. La función evalúa el cuerpo repetidamente, con cada elemento de la secuencia que se le pasa como argumento.
La función
doseqrecibe como argumento un vector de asociaciones de nombre-valor, que puede presentar un aspecto extraño:[nombre secuencia]. Al iterar sobre cada elemento desecuencia, el elemento iterado se asigna anombre.
;; ejemplo de doseq
(doseq [n (turtle-names)] (forward n 40))
chord y más adelantedotimes
La función
dotimes(“hacer n veces”) es otra función de secuencias ampliamente utilizada. Comodoseq, la función evalúa repetitivamente la forma pasada como cuerpo. La diferencia está en la asociación con el argumento.dotimesrecibe:[nombre max-entero].
La función
dotimeses lo más parecido a un bucleforen otros lenguajes de programación. Esta función nos permite acceder mediante un índice a cualquier elemento de la secuencia utilizando la funciónnth.
;; asumiendo que hay más de una tortuga
(def names (turtle-names))
(dotimes [n (count names)] (right (nth names n) (* 45 n)))
Regresar a la primera diapositiva, o ir al índice.