Skip to content

Instantly share code, notes, and snippets.

@guv
Created April 25, 2013 12:34
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 guv/5459364 to your computer and use it in GitHub Desktop.
Save guv/5459364 to your computer and use it in GitHub Desktop.
Parallel let macro
(defmacro plet [bindings & body]
(let [bindings (partition-all 2 bindings)
destruct-exprs (map first bindings)
expressions (map second bindings)
vars (repeatedly (count bindings) gensym)]
`(let [~@(mapcat (fn [var expr] `[~var (future ~expr)]) vars expressions)
~@(mapcat (fn [destr var] `[~destr (deref ~var)]) destruct-exprs vars)]
~@body)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment