(define (random-int min max) (+ min (random (+ 1 (- max min))))) (define (draw-samples seq length maxlength) (lazy-take (or length (and max (random maxlength))) seq)) (define (make-number-seq min max filter succ) (let ((seq (lazy-filter filter (lazy-iterate succ min)))) (if max (lazy-take (+ 1 (- max min)) seq) seq))) (define (gen-fixnum/random #!key (min 0) (max 39085789345) (filter (constantly #t)) (after identity)) (let ((next (lambda _ (after (random-int min max))))) (make-number-seq (next) max filter next))) ;; list (define (gen-list generator #!key (max 10) (length #f)) (lazy-repeatedly (lambda () (lazy-seq->list (draw-samples generator length max)))))