Thank you, Andy! Both for spotting my mistake and for your comments on style.
On Thursday, March 20, 2014 11:34:00 PM UTC+1, Andy Fingerhut wrote: > > I haven't read all of your code, but note that the Haskell algorithm says > it takes a sequence of random values where the first is in the range > [0,n-1], the second in the range [0,n-2], third in [0,n-3], etc. Your > repeatedly call here: > > > https://github.com/pebrc/ninety-nine-clojure/blob/master/src/ninety_nine_clojure/lists.clj#L273 > > Is generating a sequence of random values that are all in the range > [0,n-1]. > > A couple of style comments on your function perfect-functional-shuffle: > > I find it easier to read when a let or loop has multiple bindings on one > line if it has commas between the symbol value pairs, e.g.: > > (loop [bst bst, rnds rnds, acc []] > > Clojure treats commas in source code as white space. > > The default case in a cond is most often written :else rather than > :otherwise, but both are clear in their meaning and have the same behavior > (i.e. any value there other than nil or false will be treated as true). > > I prefer to write two-branch cond statements using if rather than cond. > > Andy > > > On Thu, Mar 20, 2014 at 1:59 PM, Peter Brachwitz > <peter.b...@gmail.com<javascript:> > > wrote: > >> I tried to implement perfect functional shuffle in Clojure as outlined in >> http://okmij.org/ftp/Haskell/perfect-shuffle.txt >> >> This is purely for educational purposes as I am learning Clojure (so >> please don't be too hard on me if I did something silly) >> >> The code: >> >> https://github.com/pebrc/ninety-nine-clojure/blob/master/src/ninety_nine_clojure/lists.clj#L267 >> >> A related blog post: >> >> http://pbrc.blogspot.com/2014/03/99-clojure-problems-25-generate-random.html >> >> I would be very happy about any feedback/review. If you have a look at >> the blog post you will find a histogram that seems to indicate that my >> perfect functional shuffle is not quite perfect because it is not a uniform >> distribution. That is almost certainly a mistake on my part, again, I would >> be very grateful for any hints. >> >> Cheers, >> Peter >> >> -- >> You received this message because you are subscribed to the Google >> Groups "Clojure" group. >> To post to this group, send email to clo...@googlegroups.com<javascript:> >> Note that posts from new members are moderated - please be patient with >> your first post. >> To unsubscribe from this group, send email to >> clojure+u...@googlegroups.com <javascript:> >> 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 unsubscribe from this group and stop receiving emails from it, send an >> email to clojure+u...@googlegroups.com <javascript:>. >> For more options, visit https://groups.google.com/d/optout. >> > > -- 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 unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.