Translate

viernes, 12 de marzo de 2021

Primeros pasos con Clojure, parte 30

 Seguimos con Clojure..


Clojure no es un lenguaje funcional puro, por lo tanto tiene funciones con efecto secundario. Vamos a ver algunas : 


dotimes :

user=> (dotimes [i 3]

         (println i))

0

1

2

nil

Muy parecido a un for, empieza de 0 y sigue hasta 3 - 1.


doseq :

user=> (doseq [n (range 3)]

         (println n))

0

1

2

nil

Itera sobre una secuencia (evaluandola si es lazy). Tambien existe la variante que procesa todas las permutaciones del contenido de la secuencia, veamos un ejemplo : 

user=> (doseq [letter [:a :b]

               number (range 3)] ; list of 0, 1, 2

         (prn [letter number]))

[:a 0]

[:a 1]

[:a 2]

[:b 0]

[:b 1]

[:b 2]

nil


for : 

user=> (for [letter [:a :b]

             number (range 3)] ; list of 0, 1, 2

         [letter number])

([:a 0] [:a 1] [:a 2] [:b 0] [:b 1] [:b 2])


La función for se utiliza para generar listas, como listas por comprensión.