Re: Resources on optimizing Clojure code

2010-11-04 Thread cej38
It is wonderful that people are so willing to help with a specific problem, and I encourage you to continue doing so, but I don't think anyone has answered the real question. Is there material out there that describes some of the mechanisms, tools, ideas, etc. that will allow the average clojure

Re: Resources on optimizing Clojure code

2010-11-04 Thread Gary Poster
On Nov 4, 2010, at 1:32 PM, cej38 wrote: It is wonderful that people are so willing to help with a specific problem, and I encourage you to continue doing so, but I don't think anyone has answered the real question. Is there material out there that describes some of the mechanisms, tools,

Re: Resources on optimizing Clojure code

2010-11-03 Thread Dan Kefford
Sorry for the delayed response. OK... here's an example; my solution to problem 187: (defn divides? [n d] (zero? (rem n d)) ) (declare prime? prime-seq) (defn prime? [n] (if ( n 2) false (every? #(not (divides? n %)) (take-while #(= (* % %) n) prime- seq))) ) (def prime? (memoize

Re: Resources on optimizing Clojure code

2010-11-03 Thread Mark Engelberg
Your Clojure implementation of your particular approach is reasonable, but you need a cleverer approach. I'll send you a hint offline. -- 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

Re: Resources on optimizing Clojure code

2010-11-03 Thread Dan Kefford
One idea that I had was to inline the factoring logic into twice- composite. Who cares about the factors? We just want to know if there are two or not: (defn twice-composite? [n] (loop [ps prime-seq tmp n p-count 0] (if ( 2 p-count) false (if (= 1 tmp)

Re: Resources on optimizing Clojure code

2010-11-03 Thread Mark Engelberg
All the time spent factoring is wasted. You can *construct* and/or count the semiprimes far more efficiently than your method of factoring each number one a time in order to filter the semiprimes from the entire range of numbers up to 10^8. Your approach is fundamentally slow; this has nothing

Re: Resources on optimizing Clojure code

2010-11-03 Thread Leif Walsh
If you want to do this, you can do it simpler, without the loop and temp var: (defn twice-composite? [n] (- (take-while #( % n) prime-seq) (every #(or (divides? (* 2 %) n) (not (divides? % n but this is not what you want. See the hints I sent you off the list. On Wed,

Re: Resources on optimizing Clojure code

2010-11-03 Thread Ken Wesson
If you're looking to generate all the numbers with exactly two prime factors (counting multiplicity), I have clojure code that generates the ones up to 10^8 in under two minutes: com.example.sbox= (time (count (semiprimes-to 1))) Elapsed time: 106157.33292 msecs 41803068 It's

Resources on optimizing Clojure code

2010-11-02 Thread Dan Kefford
Hello fellow clojurians... I've been using Clojure now fairly regularly for the past two months solving problems on Project Euler. I've been fairly successful solving them but there are times where the performance of my code either stinks (the answer may come back in 5-10 minutes) or not at all

Re: Resources on optimizing Clojure code

2010-11-02 Thread Alan
Usually it's more about the algorithm than the language. Java can generally do things faster than clojure, simply because it has fewer layers, but the speedup is a linear factor. If the java solution for 1000 elements takes 5ms and your clojure code takes even a second, it's likely that clojure

Re: Resources on optimizing Clojure code

2010-11-02 Thread David Andrews
Yes, on the handful of Project Euler exercises I've attempted, my algorithm choice was frequently the source of poor performance. Are you familiar with the clojure-euler wiki at http://clojure-euler.wikispaces.com/ ? After I do an Euler exercise I compare my code and runtime with other Clojure