Ahem. Here is a more idiomatic version that runs under half a second, no annotations required.
(def vs (atom {})) (defn sk [k] (if (@vs k) (@vs k) (let [ans (if (< k 56) (- (mod (+ 100003 (- (* k 200003)) (* 300007 k k k)) 1000000) 500000) (- (mod (+ (sk (- k 24)) (sk (- k 55))) 1000000) 500000))] (do (swap! vs assoc k ans) ans)))) user> (reset! vs {}) {} user> (time (dorun (map sk (range 100000)))) "Elapsed time: 155.082351 msecs" nil I guess the moral is that the built-in data structures are quite fast, and reflection is evil. -- 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