Je vais avoir du mal à comprendre comment on crée un paresseux séquence en Clojure.
La documentation pour la macro n'est pas du tout clair pour moi:
Utilisation: (lazy-seq & corps) Prend un corps, des expressions qui renvoie un ISeq ou nul, et les rendements un Seqable objet qui appelle le corps seulement la première fois seq est appelé, et va mettre en cache le résultat et de le retourner sur tous les suivants seq appels.
Tous les exemples que j'ai vu, semblent faire quelque chose comme ce qui suit:
; 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)))
)
Donc, la première chose que je ne comprends pas est, depuis paresseux-seq est à l'extérieur de l'appel à cheval, comment elle fait pour prévenir les conj de générer une séquence infinie de l'évaluation?
Ma deuxième question est, est-ce paresseux de la séquence de définitions de toujours prendre cette forme générale?