Uso de secuencia diferida de Clojure



0 Answers

Question

Tengo problemas para entender cómo se crea una secuencia perezosa en Clojure.

La documentación para la macro no está nada clara para mí:

Uso: (lazy-seq & body) Toma un cuerpo de expresiones que devuelve un ISeq o nil, y produce un objeto Seqable que invocará el cuerpo solo la primera vez que se llama a seq, y guardará en caché el resultado y lo devolverá en todos los siguientes llamadas seq.

Todos los ejemplos que he visto, parecen hacer algo como lo siguiente:

; return everything in the sequence starting at idx n
(defn myseq-after-n [n]
  (...)
)

(def my-lazy-seq
  (lazy-seq (conj [init-value] (myseq-after-n 2)))
)

Entonces, lo primero que no entiendo es que, dado que lazy-seq está fuera del llamado a conj, ¿cómo impide que conj genere una secuencia infinita en la evaluación?

Mi segunda pregunta es, ¿las definiciones de secuencia diferida siempre toman esta forma general?




Related