add infinite-generator and make-repeated-sequence-generator

svn: r17559
This commit is contained in:
Jon Rafkind 2010-01-07 23:23:56 +00:00
parent 530238a12b
commit db44bb9e7a

View File

@ -4,7 +4,8 @@
scheme/control scheme/control
scheme/stxparam scheme/splicing) scheme/stxparam scheme/splicing)
(provide yield generator in-generator infinite) (provide yield generator in-generator infinite-generator
make-repeated-sequence-generator)
;; (define-syntax-parameter yield ;; (define-syntax-parameter yield
;; (lambda (stx) ;; (lambda (stx)
@ -62,6 +63,12 @@
(define (generator) (cont)) (define (generator) (cont))
generator)) generator))
(define-syntax-rule (infinite-generator body0 body ...)
(generator
(let loop ()
body0 body ...
(loop))))
(define stop-value (gensym)) (define stop-value (gensym))
(define-sequence-syntax in-generator (define-sequence-syntax in-generator
@ -74,9 +81,9 @@
#'[(id ...) #'[(id ...)
(in-producer (generator body0 body ... stop-value) stop-value)]]))) (in-producer (generator body0 body ... stop-value) stop-value)]])))
(define (infinite sequence) (define (make-repeated-sequence-generator sequence)
(generator (infinite-generator
(for ([i (in-cycle sequence)]) (for ([i sequence])
(yield i)))) (yield i))))
#| #|