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.