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