Skip to content

Instantly share code, notes, and snippets.

@mfikes
Created December 12, 2014 21:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mfikes/d6233797845f72bbfd6f to your computer and use it in GitHub Desktop.
Save mfikes/d6233797845f72bbfd6f to your computer and use it in GitHub Desktop.
Recursive fn defined in let block
(defmacro memoize-rec [form]
(let [[fn* fname params & body] form
params-with-fname (vec (cons fname params))]
`(let [f# (memoize (fn ~params-with-fname
(let [~fname (partial ~fname ~fname)] ~@body)))]
(partial f# f#))))
(let [fib (fn fib [n]
(if (< n 2)
n
(+ (fib (- n 1))
(fib (- n 2)))))]
(fib 42))
(let [fib (memoize-rec
(fn fib [n]
(if (< n 2)
n
(+ (fib (- n 1))
(fib (- n 2))))))]
(fib 42))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment