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

Reply via email to