>>574
伝統的なマクロでも不都合は防ぐことはできる。
そういった対策を自動でやってくれるのが健全マクロ。
何が不都合なのかというと

(define-macro (hage test . body)
 `(let ((var ,(test))) (var ,@body) (var ,@body)))

こんなマクロを作った場合にvarという名前が既に環境に入ってたら意味が違ってくる。
これを以下の様に直すと不都合がなくなる。

(define-macro (hage test . body)
 (let ((var (gensym)))
  `(let ((,var ,(test))) (,var ,@body) (,var ,@body))))

こういう事を自動でやるのが健全なマクロ。
でも健全マクロは冗長で独自の構文を覚えなきゃならない意味で個人的に嫌い。