layout | title | permalink |
---|---|---|
default |
Secuencias |
/es/outline/sequences.html |
{::options parse_block_html="true" /}
{% comment %}
http://clojurebridge.github.io/curriculum/es/outline/sequences.html
{% endcomment %}
{: .slide-title .chapter}
- Qué es una secuencia
- Funciones para secuencias
doseq
dotimes
En Clojure, podemos decir que cada estructura de datos es una secuencia. Hasta ahora, aprendimos sobre
vector
ymap
, ambas de las cuales son secuencias. String también es una secuencia. Cuando algo es seq-uenciable, es una secuencia. {: ng-show="block11" .description}
Si algo es seq-uenciable, aplicando
first
obtenemos el primer elemento de la secuencia. Ésta es una buena forma de probar si algo es o no es una secuencia. {: ng-show="block12" .description}
(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
map
yreduce
en la sección "Funciones cuyos parámetros son otras funciones". Éstas también son funciones para secuencias. {: ng-show="block21" .description}
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. {: ng-show="block31" .description}
La función
doseq
recibe 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
. {: ng-show="block32" .description}
;; ejemplo de doseq
(doseq [n (turtle-names)] (forward n 40))
- Turtles Walk (más estudio de funciones)
- sección 5 y posteriores
- Snowflakes (animación)
- paso 4 y siguientes
- Twinkle Twinkle Little Star (haciendo sonido)
- función
chord
y más adelante
- función
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.dotimes
recibe:[nombre max-entero]
. {: ng-show="block41" .description}
La función
dotimes
es lo más parecido a un buclefor
en otros lenguajes de programación. Esta función nos permite acceder mediante un índice a cualquier elemento de la secuencia utilizando la funciónnth
. {: ng-show="block42" .description}
;; asumiendo que hay más de una tortuga
(def names (turtle-names))
(dotimes [n (count names)] (right (nth names n) (* 45 n)))
- Tortugas caminando (más estudio de funciones)
- sección 6 y siguientes
- Copos de nieve (animación)
- paso 5-4 y siguientes
- Estrellita que brillas (haciendo sonidos)
- sección Twinkle Little Star completa
{% comment %}
🌟 Un enlace inferior es sólo para una diapositiva. Ve a README.md 🌟
{% endcomment %}