S9fES  (macro-expand object)    ==>  object
       (macro-expand-1 object)  ==>  object

If OBJECT contains any form that applies a macro, replace that form by
its expanded form, else return OBJECT unaltered. MACRO-EXPAND expands
all macro applications in the given object recursively. MACRO-EXPAND-1
expands only the first appearance of a macro application and then stops.

(define-syntax (while p . body)
  `(let loop ()
     (if ,p
         (begin ,@body (loop)))))

(macro-expand-1 '(while (< x 10)
                   (display "hello!")
                   (newline)
                   (set! x (+ x 1))))
  ==>  (let loop ()
         (if (< x 10)
             (begin (display "hello!")
                    (newline)
                    (set! x (+ x 1))
                    (loop))))

(macro-expand '(while (< x 10)
                 (display "hello!")
                 (newline)
                 (set! x (+ x 1))))
  ==>  (((lambda (loop)
           ((lambda (G57)
              (set! loop G57)
              loop)
            (lambda ()
              (if (< x 10)
                  (begin (display "hello!")
                         (newline)
                         (set! x (+ 1 x))
                         (loop))))))
        #f))
