while.scm
(module while mzscheme
  (provide while)
  
  (define-syntax (while stx)
    (syntax-case stx ()
      [(while test-expr body ...)
       #'(let loop ([test test-expr])
           (if test
               (begin
                 body ...
                 (loop test-expr))))]
      [else
       (raise-syntax-error #f "(while test-expr body ...) expected, got:" stx)])))