Found a post on clojure-dev about this https://groups.google.com/forum/?fromgroups=#!topic/clojure-dev/F68GRPrbfWo
On Fri, Mar 22, 2013 at 1:29 AM, Nelson Morris <nmor...@nelsonmorris.net> wrote: > If I'm reading everything correctly: > > 1. Object 's .toString uses .hashCode() > 2. LazySeq 's .hashCode() uses seq() which realizes a seq. > 3. LazySeq 's .hashCode() calls .hashCode() on the realized seq > 3. (map ..) creates a LazySeq with a fn to create (cons val (lazy-seq > (map f rest))) > 4. (cons ... ...) creates a Cons > 5. Cons uses Aseq's .hashcode() which traverses each object in the seq > and merges the hashcodes together. > > A similar thing happens with a (range) as it builds a ChunkedCons > which also uses Aseq's hashcode. > > On Fri, Mar 22, 2013 at 12:53 AM, Marko Topolnik > <marko.topol...@gmail.com> wrote: >> I am deeply puzzled abouth the behavior of .toString invocation on a lazy >> sequence. >> >> ==> (.getClass (map println (range 100))) >> clojure.lang.LazySeq >> ==> (.toString (map println (range 100))) >> ;; integers 0..100 printed >> "clojure.lang.LazySeq@590b4b81" >> >> It should be obvious from the output, but for the record: LazySeq doesn't >> override toString, so just the basic Java method is called. How can this >> possibly cause the sequence to be realized? >> >> Beyond my curiosity, however, what possible purpose could such behavior >> serve? >> >> -marko >> >> >> >> On Thursday, March 21, 2013 7:54:39 PM UTC+1, Razvan Rotaru wrote: >>> >>> Hi, >>> >>> I'm curious, why doesn't toString of clojure.lang.LazySeq return the >>> entire sequence as a String, and returns the Java pointer instead? I find it >>> annoying when I do this: >>> >>> >>> user> (str (map + [1 2 3])) >>> "clojure.lang.LazySeq@7861" >>> >>> >>> What's the reason behind this decision? Shouldn't toString trigger the >>> evaluation of the sequence? Doesn't it do that for other values, like >>> numbers and vectors? >>> >>> Is there an alternative to the code above (preferably simple and elegant), >>> which will return the etire sequence? >>> >>> >>> Thanks, >>> Răzvan >> >> -- >> -- >> 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 >> --- >> You received this message because you are subscribed to the Google Groups >> "Clojure" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to clojure+unsubscr...@googlegroups.com. >> For more options, visit https://groups.google.com/groups/opt_out. >> >> -- -- 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 --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.