Absolutely essential reading. On Wed, Jan 23, 2013 at 6:02 AM, Christophe Grand <christo...@cgrand.net> wrote: > and kotka.de/blog/2010/03/memoize_done_right.html has some intersting > discussion on memoization > > > On Wed, Jan 23, 2013 at 9:12 AM, Baishampayan Ghose <b.gh...@gmail.com> > wrote: >> >> Take a look at core.cache - https://github.com/clojure/core.cache ~BG >> >> On Wed, Jan 23, 2013 at 1:11 PM, Omer Iqbal <momeriqb...@gmail.com> wrote: >> > I've been reading a bit about the STM, and here's an implementation of a >> > FIFO cache for producing a memoized version of a function. Is it correct >> > to >> > use the STM in this case, or are there any drawbacks? >> > >> > (defn bounded-memoize >> > "Return a bounded memoized version of fn 'f' >> > that caches the last 'k' computed values" >> > [f k] >> > (let [cache (ref {}) >> > values (ref clojure.lang.PersistentQueue/EMPTY)] >> > (fn [& args] >> > (if-let [e (find @cache args)] >> > (val e) >> > (let [result (apply f args)] >> > (dosync >> > (alter values conj args) >> > (alter cache assoc args result) >> > (if (> (count @values) k) >> > (let [evict (peek @values)] >> > (alter values pop) >> > (alter cache dissoc evict)) >> > ) >> > result >> > )) >> > >> > ) >> > )) >> > ) >> > >> > >> > -- >> > -- >> > 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 >> > >> > >> >> >> >> -- >> Baishampayan Ghose >> b.ghose at gmail.com >> >> -- >> -- >> 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 >> >> > > > > -- > On Clojure http://clj-me.cgrand.net/ > Clojure Programming http://clojurebook.com > Training, Consulting & Contracting http://lambdanext.eu/ > > -- > -- > 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 > >
-- -- http://blog.fogus.me -- http://github.com/fogus -- -- -- 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