Sequências Preguiçosas e Fluxos Infinitos
Domine as sequências preguiçosas do Clojure para modelar fluxos infinitos, adiar cálculos e processar dados de forma eficiente sem esgotar a memória.
Sequências Preguiçosas e Fluxos Infinitos é uma aula grátis de Clojure Functional Programming & JVM Backend Development no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Clojure Functional Programming & JVM Backend Development, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Clojure Functional Programming & JVM Backend Development inclui 4 aulas no total.
Partes desta aula ainda não foram traduzidas e aparecem em inglês.
What Is Laziness?
A lazy sequence computes its elements only as they are needed. This lets you describe potentially infinite data and consume just the part you want.
An Infinite Range
range with no arguments returns an infinite lazy sequence. It never materializes fully; you take only what you need.
(take 5 (range))
; => (0 1 2 3 4)iterate
iterate builds an infinite sequence by repeatedly applying a function to a starting value.
(take 5 (iterate (fn [x] (* x 2)) 1))
; => (1 2 4 8 16)repeat and cycle
repeat yields the same value forever; cycle loops a collection forever. Both are lazy.
(take 3 (repeat :x)) ; => (:x :x :x)
(take 5 (cycle [1 2])) ; => (1 2 1 2 1)lazy-seq
You build your own lazy sequences with lazy-seq. The body runs only when the next element is requested.
(defn nums-from [n]
(lazy-seq
(cons n (nums-from (inc n)))))
(take 4 (nums-from 10)) ; => (10 11 12 13)Lazy Transformations
map, filter, and take-while are all lazy. Chaining them does no work until you consume the result.
(->> (range)
(map (fn [x] (* x x)))
(filter even?)
(take 4))
; => (0 4 16 36)Realization & Chunking
Lazy seqs are realized in chunks of 32 for efficiency. So asking for one element may compute up to 32. Keep transformations side-effect-free to avoid surprises.
(first (map (fn [x] (println "seen" x) x) (range 100)))
; prints 0..31 due to chunkingForcing Realization
Use doall to fully realize a lazy sequence (e.g. to trigger side effects), or dorun when you do not need the results.
(doall (map println [1 2 3]))Avoiding the Head-Holding Trap
If you keep a reference to the head of an infinite seq while walking it, the whole realized portion stays in memory. Let go of the head to allow garbage collection.
; Bad: binding holds the head
(let [s (range)] (last (take 1000000 s)))Practical Stream: Fibonacci
Lazy sequences elegantly express recursive streams like Fibonacci numbers.
(def fibs
(map first
(iterate (fn [[a b]] [b (+ a b)]) [0 1])))
(take 7 fibs) ; => (0 1 1 2 3 5 8)Laziness vs Transducers
Lazy seqs build intermediate sequences; transducers (from a prior lesson) avoid them. Use laziness for infinite/streamed data and transducers for high-throughput pipelines.
Quick Check
Test your lazy-sequence intuition.
Recap
You learned how lazy sequences defer computation and model infinite streams.
- Generate with
range,iterate,repeat,cycle,lazy-seq map/filterstay lazy until consumed- Beware chunking and head-holding
Aprenda Clojure com um tutor de IA — grátis
Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.
- Cursos
- 12
- Aulas
- 48
Perguntas Frequentes
A aula “Sequências Preguiçosas e Fluxos Infinitos” é grátis?
Sim — o texto completo de “Sequências Preguiçosas e Fluxos Infinitos” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Clojure Functional Programming & JVM Backend Development, atualize para CoddyKit PRO. O curso de Clojure Functional Programming & JVM Backend Development inclui 4 aulas no total.
O que vou aprender em “Sequências Preguiçosas e Fluxos Infinitos”?
Domine as sequências preguiçosas do Clojure para modelar fluxos infinitos, adiar cálculos e processar dados de forma eficiente sem esgotar a memória. Você pratica Clojure Functional Programming & JVM Backend Development com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Clojure Functional Programming & JVM Backend Development?
Nenhuma experiência prévia é necessária. Clojure Functional Programming & JVM Backend Development no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “Sequências Preguiçosas e Fluxos Infinitos”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Clojure Functional Programming & JVM Backend Development?
Sim. Cada aula de Clojure Functional Programming & JVM Backend Development inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Transdutores para processamento eficiente
- Mônadas e abstrações funcionais
- Testes baseados em propriedades com clojure.test.check
- Sequências Preguiçosas e Fluxos Infinitos