Macros

As an example, Common Lisp has no while loop, rather, there’s a loop macro directive for iterating while a condition is true. For brevity, we can define:

(defmacro while (condition &body body)
  `(loop while ,condition do (progn ,@body)))

And use it like this:

(while (some-condition)
  (do-something)
  (do-something-else))

This expands to:

(loop while (some-condition) do
  (progn
    (do-something)
    (do-something-else)))