Skip to content

Instantly share code, notes, and snippets.

@autre
Created September 26, 2010 14:22
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 autre/597967 to your computer and use it in GitHub Desktop.
Save autre/597967 to your computer and use it in GitHub Desktop.
;; from here: http://www.learningclojure.com/2010/09/clojure-macro-tutorial-part-i-getting.html
(defmacro forloop
[var-init & body]
(let [myvar (nth var-init 0)
start (nth var-init 1)
end (nth var-init 2)]
(list 'loop [myvar start]
(list 'when (list '<= myvar end)
(cons 'do body)
(list 'recur (list 'inc myvar))))))
user=> (macroexpand-1 '(forloop [i 1 10] (println i) (println (* i i))))
(loop [i 1] (when (<= i 10) (do (println i) (println (* i i))) (recur (inc i))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment