(define while (macro (test body) (quote (letrec ((loop (lambda () (if (unquote test) (begin (unquote body) (loop)) ())))) (loop)))))