calling a macro from a macro added by iisjmii on Sun Aug 26 20:02:03 2012
(define-syntax destruct (ir-macro-transformer (lambda (form inject compare?) (apply (lambda (_ names lst #!rest body) `(apply (lambda (,@names) ,@body) ,lst)) form)))) ;While loop that can be broken using 'return' (define-syntax while (ir-macro-transformer (lambda (form inject compare?) (destruct (_ pred body) form `(call/cc (lambda (,(inject 'return)) (let loop () (when ,pred ,@body (loop))))))))) ;=> (while (positive? x) (display x) (set! x (- x 1)) (if (= x 2) (return #t))) ;Error: during expansion of (while ...) - unbound variable: destruct