#lang scheme/base (provide (all-defined-out)) (define (range lower upper) (list lower upper)) (define (range-lower range) (list-ref range 0)) (define (range-upper range) (list-ref range 1)) (define (range-singular? range) (eq? (range-upper range) (range-lower range))) (define (range-size range) (- (range-upper range) (range-lower range))) (define (range-unbounded? range) (eq? (range-upper range) 'unbounded)) (define (range-in-range? range n) (and (>= n (range-lower range)) (or (eq? (range-upper range) 'unbounded) (<= n (range-upper range))))) (define (random-range range) (cond ((range-singular? range) (range-lower range)) ((range-unbounded? range) (+ (range-lower range) (random 4))) (else (+ (random (range-size range)) (range-lower range)))))