* Some reorganization of code

* Rename `make-repeated-sequence-generator' -> `sequence->repeated-generator'
* Several tests for `sequence->generator'

svn: r17586
This commit is contained in:
Eli Barzilay 2010-01-09 04:45:39 +00:00
parent 3993f30dec
commit 6b7c199326
2 changed files with 28 additions and 14 deletions

View File

@ -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)))
#|

View File

@ -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))))