I've now changed my test method to this. (def pit (iterate list "bottom!"))
(defn get-bottom [p] (loop [p (first p)] (if (seq? p) (recur (first p)) p))) (defn test-walk [walker shallowest deepest] (doseq [depth (range shallowest deepest)] (println (get-bottom (walker #(str depth " reached " %) (lazy-seq (last (take depth pit)))))))) And now everything make lot more sense. A classic case of good code with bad test which make you search for some imaginary bug. So always carefully read your stack traces! Here's some benchmarking I've done with the above versions. user> (time (test-walk lazy-recursive-string-walk-with-zipper 100000 100001)) 100000 reached bottom! "Elapsed time: 1368.337794 msecs" user> (time (test-walk lazy-recursive-string-walk 100000 100001)) 100000 reached bottom! "Elapsed time: 233.80888 msecs" user> (time (test-walk really-lazy-recursive-string-walk 100000 100001)) 100000 reached bottom! "Elapsed time: 223.631872 msecs" The one with a zipper is the slowest, zippers being much more capable than just walking data structure, so it's normal. The first lazy version is more than five faster and the one using Tom Hicks lazy-walk function is slightly faster. - budu
-- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en