(library
  (loops)
  (export upto from-to while)
  (import (rnrs))

  (define-syntax upto
    (syntax-rules ()
      ((_ (var count) body ...)
       (let loop ((var 0))
         (when (< var count)
             (begin body ...)
             (loop (+ 1 var)))))))

  (define-syntax from-to
    (syntax-rules ()
      ((_ (var f t step) b1 b2 ...)
       (let loop ((var f))
        (unless (= var t)
                b1 b2 ...
                (loop (+ var step)))))))

  (define-syntax while
    (syntax-rules ()
      ((_ (var exp) body ...)
       (let loop ((var exp))
         (when var
           (begin body ...)
           (loop exp))))))

  )