(define (range start limit step)
    ;;
    ;; Generate a list from a given value, to a given value
    ;; e.g. '(start (+ start step) ... end )
    ;; Author: Daniel Turner
    ;;
    (define (iter start limit step out_list)
        (if (> (car out_list) limit)
            (reverse (cdr out_list))
            (iter start limit step (cons (+ (car out_list) step) out_list))
        )
    )
    (iter start limit step (list start))
)

(define (fizz-buzz n)
    ;;
    ;; Determine whether to fizz, buzz or fizz buzz for a given n.
    ;; Author: Daniel Turner
    ;;
    (cond ((= 0 (remainder n 15)) 'FizzBuzz)
          ((= 0 (remainder n 5)) 'Buzz)
          ((= 0 (remainder n 3)) 'Fizz)
          (else n)
    )
)
(map (lambda (n) (display n) (display "\n")) (map fizz-buzz (range 1 100 1)))
