Skip to content

Latest commit

 

History

History
161 lines (122 loc) · 5.68 KB

sequences.md

File metadata and controls

161 lines (122 loc) · 5.68 KB
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 %}

[BONUS]

Secuencias

{: .slide-title .chapter}

  • Qué es una secuencia
  • Funciones para secuencias
    • doseq
    • dotimes
### Qué es una secuencia? {: .slide_title .slide}

Estructuras de datos de Clojure

En Clojure, podemos decir que cada estructura de datos es una secuencia. Hasta ahora, aprendimos sobre vector y map, ambas de las cuales son secuencias. String también es una secuencia. Cuando algo es seq-uenciable, es una secuencia. {: ng-show="block11" .description}

first para verificar secuencias

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}

#### Resultados de `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)
### Funciones para secuencias

Clojure es muy bueno para iterar sobre una secuencia. Hay muchas funciones que interactúan con secuencias. Por ejemplo, doseq, dotimes, for, loop, doall, o dorun.

Ya vimos las funciones map y reduce en la sección "Funciones cuyos parámetros son otras funciones". Éstas también son funciones para secuencias. {: ng-show="block21" .description}

#### `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ón map. 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 de secuencia, el elemento iterado se asigna a nombre. {: ng-show="block32" .description}

;; ejemplo de doseq
(doseq [n (turtle-names)] (forward n 40))
#### EJERCICIO 1
#### `dotimes`

La función dotimes("hacer n veces") es otra función de secuencias ampliamente utilizada. Como doseq, 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 bucle for en otros lenguajes de programación. Esta función nos permite acceder mediante un índice a cualquier elemento de la secuencia utilizando la función nth. {: 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)))
#### EJERCICIO 2

{% comment %}

🌟 Un enlace inferior es sólo para una diapositiva. Ve a README.md 🌟

{% endcomment %}

Regresar a la primera diapositiva, o ir al [índice](/curriculum/#/1).