Hi,

Am 04.10.2009 um 22:47 schrieb talk:

  (defn cache
    "Replaces the function that the given variable refers to
    with a memoizing version of it."
    [fn-var]
    (??? fn-var (memoize @fn-var)))

Macros to the rescue:

(defmacro cache
  "Replaces the function that the given name refers to
  with a memoizing version of it."
  ([fn-sym] `(cache ~fn-sym ~fn-sym))
  ([fn-cached fn-uncached]
   `(let [var-meta# (meta (var ~fn-uncached))]
      (def ~fn-cached (memoize ~fn-uncached))
      (reset-meta! (var ~fn-cached) var-meta#)
      (var ~fn-cached))))

Sincerely
Meikel

Attachment: smime.p7s
Description: S/MIME cryptographic signature

Reply via email to