;; ;; generate_numbers consumes three numbers and produces a list ;; of numbers. ;; ;; (generate_numbers start end interval) will generate a list of ;; numbers starting at start, each successive number will differ from ;; the previous by interval and the sequence will stop before it ;; exceeds end. ;; ;; Example usage: ;; (generate_numbers 1 10 1) ;; (define (generate_numbers start end interval) (cond ;; start == end ? just generate a list with end in it [ (= start end) (cons end empty)] ;; is start is the only number in the list ? [(< (abs (- start end)) interval) (cons start empty)] ;; if start is less than end, we need to count up [(< start end) (cons start (generate_numbers (+ interval start) end interval))] [else ;; start must be > end, we need to count down. (cons start (generate_numbers (- start interval) end interval))])) ;; tests ;;(generate_numbers 0 5 1) ; produces '(0 1 2 3 4 5) ;;(generate_numbers 10 5 1) ; produces '(10 9 8 7 6 5) ;; (generate_numbers 0 10 3) ; produces '(0 3 6 9) ;; (generate_numbers 100 1000 222) ; produces '(100 322 544 766 988)