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