Alux, Welcome to Clojrue! Thanks for posting this example. At first glance I would combine power-of-two? and what-power-of-2 into one fn. Also, I would change the order you wrote the method calls in to favor the .method style
(defn power-of-2 "Returns log_2(n) iff n is an exact pwoer of 2. nil otherwise" (if (= (.bitCount (big-int n)) 1) (dec (.bitLength (big-int n)))) Also, letfn is for mutually recursive fns (you know, the kind that swear at each other :). I would move big-int, step & power-of-2 into their own defns. That should clean up your definition of conway-PM. Sean PS - Do you use github or lisppaste? The general practice is to put code in a pastebin, and simply include a link in the mailing list. On Feb 13, 11:48 am, alux <alu...@googlemail.com> wrote: > Hi, > > I just finished my first (very small) Clojure program. I come from > Java, so it will be everything but idiomatic Clojure, so I post it > here and you may give as much criticism as you want. I'm here to > learn. > > It implements JHConway prime machine. The program does not want to be > a quick prime generator (the algorithm is interesting but not quick at > all), but it shall be/become a good implementation of this algorithm. > > http://www.jstor.org/pss/2690263(The first page is enough to > implement the algorithm, even if the explanation will come on the next > pages only.) > > Started like: > > (conway-PM) > > It came up to 563 after about 6 hours on my 1.2 GHz Centrino ;-) > > Thats the program, feel free to tell me stuff (or to ignore me, would > be a lessen too :) > > (defn conway-PM [] > (let [ > factors '(17/91 78/85 19/51 23/38 29/33 77/29 95/23 77/19 > 1/17 11/13 > 13/11 15/14 15/2 55/1) > big-int-class (. 999999999999999999999999999999999 getClass)] > (letfn [ > (big-int [n];"makes a bigint from int, keeps n if > bigint already" > (let [current-class (. n getClass)] > (if (= current-class big-int-class) n > (. java.math.BigInteger > valueOf n)))) > (power-of-two? [n];"true iff the integer n is an > power of 2." > (= (. (big-int n) bitCount) 1)) > (what-power-of-2 [n];"gets n from 2^n" > (- (. (big-int n) bitLength) 1)) > (step ;"Multiplies with the first factor to give an > integer." > [n, unused-factors] > (let [factor (first unused-factors) > rest-factors (rest unused-factors) > dummy (* n factor)] > (if (integer? dummy) > dummy > (step n rest-factors))))] > (loop [seed 2] > (let [next (step seed factors)] > (if (power-of-two? next) > (println (what-power-of-2 > next))) > (recur next)))))) > > Regards, alux -- 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