Make in-generator work when yield returns multiple values

This commit is contained in:
Jon Rafkind 2010-08-23 12:50:08 -06:00
parent bdf98ebbe2
commit 4bca9842f5
2 changed files with 11 additions and 2 deletions

View File

@ -113,9 +113,11 @@
(lambda (stx)
(syntax-case stx ()
[((id ...) (_ body0 body ...))
(with-syntax ([(stops ...) (syntax-case #'((id stop-value) ...) ()
[((x v) ...) #'(v ...)])])
#'[(id ...)
(in-producer (generator () body0 body ... stop-value)
stop-value)]])))
(in-producer (generator () body0 body ... (values stops ...))
(lambda xs (eq? (car xs) stop-value)))])])))
(define (sequence->generator sequence)
(generator () (for ([i sequence]) (yield i))))

View File

@ -242,6 +242,13 @@
(for/list ([(x i) (in-indexed (in-generator (yield 1) (yield 2) (yield 3)))])
(list x i)))
(test '[(1 2) (3 4)] 'for*-generator
(for*/list ([(n after)
(in-generator
(yield 1 2)
(yield 3 4))])
(list n after)))
(let ([helper (lambda (i)
(yield (add1 i)))])
(test '(1 2 3) 'parameterized-yield