* Some reorganization of code
* Rename `make-repeated-sequence-generator' -> `sequence->repeated-generator' * Several tests for `sequence->generator' svn: r17586
This commit is contained in:
parent
3993f30dec
commit
6b7c199326
|
@ -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)))
|
||||
|
||||
#|
|
||||
|
|
|
@ -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))))
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user