Hi Zemin, I just started learning clojure and came across your post, as I was implementing Floyd's algorithm.
Here's what I came up with. https://gist.github.com/patforna/2cf0ffb46a1c0b93084d I've got no idea, if this makes sense, so any feedback would be really appreciated. Cheers, pat On Sunday, June 30, 2013 10:20:33 AM UTC+7, Zhemin Lin wrote: > > Hi Simone & Cedric, > > Thanks for your comment. In fact, my purpose is to demonstrate to my > colleagues how Clojure deals with this algorithm. > I'm going to implement the Brent's way. > > However, I'm wondering if I can make the Floyd's more functional. > Tail recursion is good, but not good enough to show the "paradigm shift" > (of functional programming) to my colleagues. > > Any ideas? > Thanks! :) > > 2013年6月30日日曜日 2時58分57秒 UTC+8 Cedric Greevey: >> >> If the function is expensive to compute, you might prefer Brent's >> periodicity detection algorithm, which instead of 1.5xn invocations of the >> function only requires n + o(log n) invocations and supposedly detects just >> as fast. >> >> You store [last-n, last-f, next-n] = [0, f(0), 1] and then, for n = 1 to >> whatever: >> >> * compute f(n) >> * see if it's equal to last-f; if it is, f is or becomes periodic with a >> period dividing n - last-n. >> * if n = next-n, change the store to [n, f(n), 2*next-n] >> * move on to f(n + 1). >> >> >> >> On Sat, Jun 29, 2013 at 10:43 AM, Simone Mosciatti <mweb...@gmail.com> >> wrote: >> >>> It is very interesting, just a friendly suggestion, if you share code, >>> and need some help, make sure people can get immediately what is going on. >>> (READ: comment the code) >>> >>> >>> On Saturday, June 29, 2013 1:34:57 PM UTC+2, Zhemin Lin wrote: >>>> >>>> Hi. >>>> One of my colleagues gave a share about the cycle detecting >>>> tortoise-hare algorithm (wiki >>>> <http://en.wikipedia.org/wiki/Cycle_detection#Tortoise_and_hare>). >>>> I translated the script on Wiki from Python to Clojure. >>>> It worked, but not elegant. I'd like to make it more functional, more >>>> tasty. >>>> Any suggestions to help it evolve? >>>> >>>> I uploaded my (messy) code here: https://github.com/ >>>> miaoski/clojure-tortoise-hare >>>> Thanks a lot! :) >>>> >>>> -- >>> -- >>> 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 >>> 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 >>> 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. >>> For more options, visit https://groups.google.com/groups/opt_out. >>> >>> >>> >> >> -- 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.