or you can also store it in a var: (defn fib [n] (if (or (zero? n) (= n 1)) 1 (+ (fib (dec n) ) (fib (- n 2)))))
(time (fib 30)) ;; "Elapsed time: 265.472 msecs" (def fib-memo (memoize fib)) (time (fib-memo 30)) ;; "Elapsed time: 222.122 msecs" (time (fib-memo 30)) ;; "Elapsed time: 0.058 msecs" (time (fib-memo 30)) ;; "Elapsed time: 0.042 msecs" Leonardo Borges www.leonardoborges.com On Sat, Apr 13, 2013 at 4:46 PM, Cedric Greevey <cgree...@gmail.com> wrote: > To get the benefit of memoization, you need to store the memoized function > and use it again. (memoize fib-nocur) returns a function that contains an > internal memory of past results. If you call (memoize fib-nocur) again you > get a second function with an (empty!) internal memory. If you don't use the > first one more than once you don't see any benefit from its memory. > > So, try this: > > (let [f (memoize fib-nocur)] > (time (f 30)) > (time (f 30)) > (time (f 30))) > > and see if the second and third times are much shorter than the first one. > > > On Sat, Apr 13, 2013 at 12:52 AM, Liao Pengyu <arise...@gmail.com> wrote: >> >> Hi, there. I have a question about the memoization in clojure. >> I compare two functions to test the performance improvement of >> memoization: >> (defn fib [n] >> (if (or (zero? n) (= n 1)) >> 1 >> (+ (fib (dec n) ) (fib (- n 2))))) >> >> (time (fib 30)) >> get the result: >> "Elapsed time: 316.65 msecs" >> 1346269 >> >> And then test for memoization: >> user> (time ((memoize fib-nocur) 30)) >> "Elapsed time: 308.729 msecs" >> 1346269 >> user> (time ((memoize fib-nocur) 30)) >> "Elapsed time: 314.942 msecs" >> 1346269 >> user> (time ((memoize fib-nocur) 30)) >> "Elapsed time: 308.657 msecs" >> 1346269 >> >> Seems no effect. Since I just test it in nrepl and have no experience >> about using clojure in project, I wander was the memoization really works? >> Look forward to your responses >> >> -- >> -- >> 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/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/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/groups/opt_out.