Skip to content

Instantly share code, notes, and snippets.

@LeastFixedPoint
Created September 4, 2012 23:23
Show Gist options
  • Save LeastFixedPoint/3627982 to your computer and use it in GitHub Desktop.
Save LeastFixedPoint/3627982 to your computer and use it in GitHub Desktop.
(defmacro chain-rebind [var-name init-value & cmds]
(let [init-binding `(~'temp ~init-value)
cmd-to-binding (fn [cmd] `(~'temp (binding [~var-name ~'temp] ~cmd)))
cmd-bindings (map cmd-to-binding cmds)
bindings-list (cons init-binding cmd-bindings)
bindings (apply concat bindings-list)]
`(let ~(vec bindings) ~'temp)))
Usage:
(def ^:dynamic *var*)
(chain-rebind *var* 10 (+ *var* 5) (/ *var* 3) (- *var* 5))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment