Revision: 17458
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at September 5, 2009 17:22 by narkisr
Initial Code
(defn memoize
[function]
(let [cache (ref {})]
(fn [& args]
(or (@cache args)
(let [result (apply function args)]
(dosync
(commute cache assoc args result))
result)))))
(def slowly (memoize (fn [x] (. Thread sleep 100) x)))
(time (slowly 1))
(time (slowly 1))
(def mri (memoize (remove-if f lst)))
(time (mri odd? (range 1000)))
(time (mri odd? (range 1000)))
;; This may show an more dramatic speed-up
(time (doall (mri odd? (range 11000))))
(time (doall (mri odd? (range 11000))))
Initial URL
http://blog.fogus.me/2008/10/24/on-lisp-clojure-chapter-5/
Initial Description
A nice example of a function that returns another function.
Initial Title
Mamoize (function that returns a function)
Initial Tags
function
Initial Language
Lisp