using dsssl added by megane on Sun Aug 26 18:59:28 2012

(define-syntax while
  (ir-macro-transformer
   (lambda (form inject compare?)
     (apply
      (lambda (_ pred #!rest body)
	`(call/cc (lambda (,(inject 'return))
		    (let loop ()
		      (when ,pred
			,@body (loop))))))
      form))))

(define x 5)
(while (positive? x)
       (display x)
       (set! x (- x 1))
       (if (= x 2)
	   (return #t)))