Hello Sean,

thank you for the answer.

I used letfn not for recursive swearing, but for the localness. I
thought the functions to be so special,
nobody else will use it, so I put it into conway-PM. Is there a non
recursive let for functions?

Thanks for the hint about Lisppaste, didnt know that.

Regards, alux


On 13 Feb., 19:25, Sean Devlin <francoisdev...@gmail.com> wrote:
> 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(Thefirst 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

Reply via email to