On Fri, Jan 20, 2012 at 1:34 AM, Mark Engelberg <mark.engelb...@gmail.com> wrote: > I think this works: > > (defmacro memofn [name args body] > `(let [cache# (atom {})] > (fn ~name ~args > (if-let [e# (find @cache# ~args)] > (val e#) > (let [ret# ~body] > (swap! cache# assoc ~args ret#) > ret#))))) > > If you spot any problems with this that I'm missing let me know.
Multi-sexp bodies will screw this one up. Change ~body to (do ~@body) to fix that. > Thanks for brainstorming with me! You're welcome. -- 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