(define (fizz-buzz lst)
(map
(lambda (x)
(cond
((= (modulo x 15) 0) "FizzBuzz")
((= (modulo x 5) 0) "Buzz")
((= (modulo x 3) 0) "Fizz")
(else x)))
lst))
(define (iota fst num . step_optional)
(let ((step
(cond
((null? step_optional) 1)
((and
(number? (car step_optional))
(null? (cdr step_optional)))
(car step_optional))
(else (error "argument error")))))
(let loop ((rest num)
(val '())
(elem (+ fst (* (- num 1) step))))
(if (<= rest 0)
val
(loop (- rest 1) (cons elem val) (- elem step))))))
(for-each (lambda (x) (display x) (display #\linefeed))
(fizz-buzz (iota 1 100)))