Oh yes, you're absolutely right. Now its 570 ms (just removed the 'doall').

On Monday, July 23, 2012 11:34:40 PM UTC+3, lpetit wrote:
>
> Hi, 
> With the new version without laziness, what exact test do you pass ?
>
> Is it still (do (time (doall (to-list tree))) :done) ?
>
> Because the doall adds an unfair re-traversal of the list, I think
>
> I see. Just removed the lazyness and got ~800ms.
>>
>>
>> (defn generate-tree [[h & t :as coll]]
>>   (if (seq coll)
>>     (let [lr (generate-tree t)] [h lr lr])
>>     nil))
>>
>> (defn to-list [[v l r :as node]]
>>   (if-not (nil? node)
>>     (into
>>      (to-list l)
>>      (conj (to-list r) v))
>>     []))
>>
>>
>> On Monday, July 23, 2012 11:20:50 PM UTC+3, tbc++ wrote:
>>>
>>> > Thanks. But I don't do any number crunching here - just a huge 
>>> structure 
>>> > creation in memory. I can't get why removing the 'lazy-seq' wrapper 
>>> from the 
>>> > second 'concat' argument make things 10x times slower. 
>>>
>>> Lazy-seqs require the allocation of a LazySeq object. Due to the lazy 
>>> nature of this structure, we have to protect against multiple 
>>> evaluation. This means that certain methods have to be synchronized: 
>>> (https://github.com/clojure/**clojure/blob/master/src/jvm/**
>>> clojure/lang/LazySeq.java<https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/LazySeq.java>).
>>>  
>>>
>>> All that makes it quite a bit slower than a simple Iterator. 
>>>
>>>
>>> Timothy 
>>
>> <http://groups.google.com/group/clojure?hl=en>
>>
>
>

-- 
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

Reply via email to