(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)