(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