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.


Reply via email to