I have the following code: (defn params-correct-lucky-numbers ( [upto] (params-correct-lucky-numbers upto true)) ( [upto check-max] (let [max (* 10 1000 1000)] (cond (< upto 1) (do (printf "The parameter upto should at least be 1 (%d)\n" upto) false) (and check-max (> upto max)) (do (printf "The parameter upto should be below %d (%d)\n" (inc max) upto) false) :else true))))
(defn lucky-numbers-avl "Lucky numbers from 1 up-to. 1 <= upto-value <= 10.000.000 http://en.wikipedia.org/wiki/Lucky_number" ; doc-string and pre-condition should match params-correct-lucky-numbers [upto] {:pre [(params-correct-lucky-numbers upto false)]} (if (= upto 1) ; for 1 the algorithm does not work, so return value manually (list 1) (loop [i 1 avl (apply avl/sorted-set (range 1 upto 2))] (let [n (nth avl i nil)] (if (and n (<= n (count avl))) (recur (inc i) (reduce (fn [sss m] (disj sss (nth avl m))) avl (range (dec n) (count avl) n))) (sequence avl)))))) When I execute in the REPL: (time (count (lucky-numbers-avl 1E8))) Then after some time the Clojure process takes the complete CPU (all cores). Twelve minutes later I get: OutOfMemoryError Java heap space java.lang.Long.valueOf (Long.java:840) In a way I understand what is happening here, but should Clojure not fail sooner? Now it is about ten minutes busy with something that is not going to work. (If it is possible to predict that it is not going to work.) -- Cecil Westerhof -- 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 --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.