(import (rnrs))

(define range
 (case-lambda
   ((n ); one-argument syntax
     (range 0 n 1))
   ((n0 n ); two-argument syntax
     (range n0 n 1))
   ((n0 n s ); three-argument syntax
     (assert 
         (and 
             (for-all number? (list n0 n s))
             (not (zero? s))))
     (let ((cmp (if (positive? s) >= <= )))
       (let loop 
           ((i n0 )
             (acc '()))
           (if 
             (cmp i n )
             (reverse acc)
             (loop (+ i s) (cons i acc))))))))
             
(display (apply string-append "" (map number->string (range 5))))
(newline)