I don't understand why the two functions below (recurs and transi) do
not produce the same result. To the best of my understanding doseq
will consume an entire sequence as demonstrated here:
user=> (doseq [x (range 0 10)] (print x))
0123456789nil
user=> *clojure-version*
{:major 1, :minor 3, :incremental 0, :qualifier nil}
user=> (defn recurs [dest src]
(if-let [element (first src)]
(recur (assoc dest element element) (rest src))
dest))
#'user/recurs
user=> (count (recurs {} (range 0 20000)))
20000
user=> (defn transi [dest src]
(let [temp (transient dest)]
(doseq [x src]
(assoc! temp x x))
(persistent! temp)))
#'user/transi
user=> (count (transi {} (range 0 20000)))
8
user=> (count (transi {} (range 0 20)))
8
user=> (count (transi {} (range 0 8)))
8
user=> (count (transi {} (range 0 7)))
7
Any ideas about why the first function does not behave the same as the
second?
Thanks
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en