(defn to-list
([node] (persistent! (to-list node (transient []))))
([[v l r :as node] acc]
(if-not (nil? node)
(let [lacc (to-list l acc)
vacc (conj! lacc v)
racc (to-list r vacc)]
racc)
acc)))
There was a mistake in my to-list. Timings have not changed.
On Mon, Jul 23, 2012 at 5:07 PM, David Nolen <[email protected]> wrote:
> (deftype Tree [n l r]
> clojure.lang.Indexed
> (nth [this idx]
> (nth this idx nil))
> (nth [_ idx not-found]
> (case idx
> 0 n
> 1 l
> 2 r
> not-found)))
>
> (defn generate-tree [[h & t :as coll]]
> (when (seq coll)
> (let [lr (generate-tree t)] (Tree. h lr lr))))
>
> (defn to-list
> ([node] (persistent! (to-list node (transient []))))
> ([[v l r :as node] acc]
> (if-not (nil? node)
> (let [lacc (to-list l acc)
> _ (conj! lacc v)
> racc (to-list r lacc)]
> racc)
> acc)))
>
> (defn tree [n]
> (generate-tree (range 1 n)))
>
> (let [t (tree 21)]
> (dotimes [_ 5]
> (time
> (dotimes [_ 1]
> (count (to-list t))))))
>
> Takes ~53ms on my machine.
>
> David
>
> On Mon, Jul 23, 2012 at 5:00 PM, Alexander Semenov <[email protected]>
> wrote:
>> No, the results are pretty the same (+-20ms).
>>
>> In fact I tried using https://github.com/hugoduncan/criterium but it dies
>> with 'out of memory' (:reduce-with option doesn't help), so I gave up.
>>
>>
>> On Monday, July 23, 2012 11:54:28 PM UTC+3, lpetit wrote:
>>>
>>>
>>> Does the timing stabilize to a lesser value if you execute it multiple
>>> times (as they did in the scala test) :
>>>
>>> (dotimes [ _ 10] (time (to-list tree)) :done)
>>>
>>> ?
>>
>> --
>> You received this message because you are subscribed to the Google
>> Groups "Clojure" group.
>> To post to this group, send email to [email protected]
>> Note that posts from new members are moderated - please be patient with your
>> first post.
>> To unsubscribe from this group, send email to
>> [email protected]
>> 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 post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en