2010/2/14 alux <alu...@googlemail.com>: > 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?
Hello, in this case, you can just use let: user=> (let [some-fn (fn [] "hello!")] (println (some-fn))) hello! nil user=> HTH, -- Laurent > > 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 -- 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