例如,Common Lisp 没有 while 循环,而是一个 loop 宏指令,用于在条件为真时进行迭代。为简洁期间,我们可以定义

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

并像这样使用它

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

这会展开为

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