Make in-generator work when yield returns multiple values
This commit is contained in:
parent
bdf98ebbe2
commit
4bca9842f5
|
@ -113,9 +113,11 @@
|
||||||
(lambda (stx)
|
(lambda (stx)
|
||||||
(syntax-case stx ()
|
(syntax-case stx ()
|
||||||
[((id ...) (_ body0 body ...))
|
[((id ...) (_ body0 body ...))
|
||||||
|
(with-syntax ([(stops ...) (syntax-case #'((id stop-value) ...) ()
|
||||||
|
[((x v) ...) #'(v ...)])])
|
||||||
#'[(id ...)
|
#'[(id ...)
|
||||||
(in-producer (generator () body0 body ... stop-value)
|
(in-producer (generator () body0 body ... (values stops ...))
|
||||||
stop-value)]])))
|
(lambda xs (eq? (car xs) stop-value)))])])))
|
||||||
|
|
||||||
(define (sequence->generator sequence)
|
(define (sequence->generator sequence)
|
||||||
(generator () (for ([i sequence]) (yield i))))
|
(generator () (for ([i sequence]) (yield i))))
|
||||||
|
|
|
@ -242,6 +242,13 @@
|
||||||
(for/list ([(x i) (in-indexed (in-generator (yield 1) (yield 2) (yield 3)))])
|
(for/list ([(x i) (in-indexed (in-generator (yield 1) (yield 2) (yield 3)))])
|
||||||
(list x i)))
|
(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)
|
(let ([helper (lambda (i)
|
||||||
(yield (add1 i)))])
|
(yield (add1 i)))])
|
||||||
(test '(1 2 3) 'parameterized-yield
|
(test '(1 2 3) 'parameterized-yield
|
||||||
|
|
Loading…
Reference in New Issue
Block a user