Comment dois-je suivre l'avancement d'un mappé fonction en clojure?
Lors du traitement des dossiers dans un langage impératif, j'ai souvent l'impression d'un message de temps en temps pour indiquer dans quelle mesure les choses ont disparu, par exemple, de reporting toutes les 1000 enregistrements. Essentiellement, cela est en train de compter les répétitions de boucles.
Je me demandais quelles sont les approches que j'ai pu prendre à cette clojure où je suis cartographie d'une fonction sur mon séquence d'enregistrements. Dans ce cas, l'impression, le message (et même compte tenu de la progression) semblent être essentiellement des effets secondaires.
Ce que je suis venu jusqu'ici ressemble à ceci:
(defn report
[report-every val cnt]
(if (= 0 (mod cnt report-every))
(println "Done" cnt))
val)
(defn report-progress
[report-every aseq]
(map (fn [val cnt]
(report report-every val cnt))
aseq
(iterate inc 1)))
Par exemple:
user> (doall (report-progress 2 (range 10)))
Done 2
Done 4
Done 6
Done 8
Done 10
(0 1 2 3 4 5 6 7 8 9)
Existe-il d'autres (mieux) les moyens de la réalisation de cet effet?
Existe-il des pièges dans ce que je fais? (Je pense que je suis la préservation de la paresse et de ne pas tenir la tête par exemple.)