diff --git a/collects/scheme/generator.ss b/collects/scheme/generator.ss index 1357fb083b..a8be9c3fae 100644 --- a/collects/scheme/generator.ss +++ b/collects/scheme/generator.ss @@ -5,8 +5,7 @@ scheme/stxparam scheme/splicing) (provide yield generator in-generator infinite-generator - sequence->generator - make-repeated-sequence-generator) + sequence->generator sequence->repeated-generator) ;; (define-syntax-parameter yield ;; (lambda (stx) @@ -65,15 +64,7 @@ generator)) (define-syntax-rule (infinite-generator body0 body ...) - (generator - (let loop () - body0 body ... - (loop)))) - -(define (sequence->generator sequence) - (generator - (for ([i sequence]) - (yield i)))) + (generator (let loop () body0 body ... (loop)))) (define stop-value (gensym)) @@ -87,7 +78,10 @@ #'[(id ...) (in-producer (generator body0 body ... stop-value) stop-value)]]))) -(define (make-repeated-sequence-generator sequence) +(define (sequence->generator sequence) + (generator (for ([i sequence]) (yield i)))) + +(define (sequence->repeated-generator sequence) (sequence->generator (in-cycle sequence))) #| diff --git a/collects/tests/mzscheme/for.ss b/collects/tests/mzscheme/for.ss index 0e723197cc..192268e5ad 100644 --- a/collects/tests/mzscheme/for.ss +++ b/collects/tests/mzscheme/for.ss @@ -247,9 +247,29 @@ (test '(#t #f #f #t #t #f odd even) 'yield-helper (list (g1) (g2) (g1) (g2) (g1) (g2) (g1) (g2)))) +(test '(1 2 3) + 'sequence->generator-1 + (let ([maker (sequence->generator '(1 2 3))]) + (list (maker) (maker) (maker)))) + +(test '(1 2 3) + 'sequence->generator-2 + (let ([maker (sequence->generator (in-list '(1 2 3)))]) + (list (maker) (maker) (maker)))) + +(test '(0 1 2 3 4) + 'sequence->generator-3 + (let ([maker (sequence->generator (in-range 0 5))]) + (list (maker) (maker) (maker) (maker) (maker)))) + +(test '(0 1 2 3 4) + 'sequence->generator-4 + (let ([maker (sequence->generator (in-naturals))]) + (list (maker) (maker) (maker) (maker) (maker)))) + (test '(1 2 3 1 2 3) - 'repeat-generator - (let ([maker (make-repeated-sequence-generator '(1 2 3))]) + 'sequence->repeated-generator + (let ([maker (sequence->repeated-generator '(1 2 3))]) (list (maker) (maker) (maker) (maker) (maker) (maker))))