FYI, I tried re-writing count-terms using loop/recur, but it didn't really make a difference:
(defn count-terms-recur [n] (loop [n n count 1] (cond (= 1 n) count (even? n) (recur (/ n 2) (inc count)) :else (recur (inc (* n 3)) (inc count))))) Clojure 1.2 = 1153.43 msecs Clojure 1.3 Alpha 1 = 190769.86 msecs On Sep 24, 10:41 am, Btsai <benny.t...@gmail.com> wrote: > After updating from Clojure 1.2 to Clojure 1.3 Alpha 1, I noticed that > one of my Project Euler solutions became dramatically slower. The > solution was for Problem 14, finding the number less than N that > produces the longest Collatz sequence. > > For N = 100,000, the time required to find the answer was as follows: > > Clojure 1.2 = 1327.45 msecs > Clojure 1.3 Alpha 1 = 191186.76 msecs > > (For Problem 14, N is actually 1,000,000, but I ran out of patience > waiting for the code to produce the answer in Clojure 1.3 Alpha 1) > > Has anyone run into something like this, or know what might have > caused the dramatic difference in speed? > > The code: > > (defn next-term [n] > (if (even? n) (/ n 2) > (inc (* n 3)))) > > (defn count-terms [n] > (if (= 1 n) 1 > (inc (count-terms (next-term n))))) > > (let [pair (juxt identity count-terms) > pairs (map pair (range 1 100000))] > (println (first (apply max-key second pairs)))) > > Machine specs: > > Intel Core 2 Duo T9300 @ 2.5 GHz > 2 GB RAM > JVM is running on server mode > > P.S. I originally wanted to write that last part of the code a little > more elegantly, like this: > > (println (apply max-key count-terms (range 1 100000))) > > But that made things even slower: > > Clojure 1.2 = 2764.48 msecs > Clojure 1.3 Alpha 1 = 740025.36 msecs > > I think I read somewhere that max-key applies f more times than is > necessary, so should not be pass any f that takes significant time to > compute. -- 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