Hi all I’m playing on a mechanism for function call results caching. This can be used to improve performance in case of a complex or remote function call. The basic idea is as follow:
;; The cache is implement as a global map. Function arguments are the key, the return result is the value. (def *cache* (hash-map)) ;; first check the cache, ;; if result not already exist – call function and store result (defmacro cache-call [f & args] `(let [cached# (get *cache* (list ~...@args))] (if cached# cached# (let [ret# (~f ~...@args)] (def *cache* (assoc *cache* (list ~...@args) ret#)) ret#) ))) usage: (cache-call + 1 2) This works fine, but pretty messy. I would like to scope the hash-map inside the macro and have a hash- map per function. How can I do it? Any style, idioms or personal comments are more than welcome. Thanks Tzach P.S. At a second phase I would like to let the user extend the caching properties per function, e.g. cache size, refresh algorithm etc. --~--~---------~--~----~------------~-------~--~----~ 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 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 -~----------~----~----~----~------~----~------~--~---