minor fixes
svn: r16012
This commit is contained in:
parent
9f10bc960b
commit
80a386e482
|
@ -8,7 +8,8 @@
|
||||||
|
|
||||||
;; (define-syntax-parameter yield
|
;; (define-syntax-parameter yield
|
||||||
;; (lambda (stx)
|
;; (lambda (stx)
|
||||||
;; (raise-syntax-error #f "yield is only bound inside a sequence generator")))
|
;; (raise-syntax-error
|
||||||
|
;; #f "yield is only bound inside a sequence generator")))
|
||||||
|
|
||||||
;; (define (procedure->generator proc)
|
;; (define (procedure->generator proc)
|
||||||
;; (define tag (make-continuation-prompt-tag))
|
;; (define tag (make-continuation-prompt-tag))
|
||||||
|
@ -20,10 +21,27 @@
|
||||||
;; r)))
|
;; r)))
|
||||||
;; (lambda () (cont)))
|
;; (lambda () (cont)))
|
||||||
|
|
||||||
|
;; not using parameterization
|
||||||
|
#;
|
||||||
|
(define-syntax-rule (generator body0 body ...)
|
||||||
|
(let ([tag (make-continuation-prompt-tag)])
|
||||||
|
(define yielder
|
||||||
|
(let ([yield (lambda (value) (shift-at tag k (set! cont k) value))])
|
||||||
|
yield))
|
||||||
|
(splicing-syntax-parameterize ([yield (make-rename-transformer #'yielder)])
|
||||||
|
(define (cont)
|
||||||
|
(reset-at tag
|
||||||
|
(let ([retval (begin body0 body ...)])
|
||||||
|
;; normal return:
|
||||||
|
(set! cont (lambda () retval))
|
||||||
|
retval))))
|
||||||
|
(define (generator) (cont))
|
||||||
|
generator))
|
||||||
|
|
||||||
(define current-yielder
|
(define current-yielder
|
||||||
(make-parameter
|
(make-parameter
|
||||||
(lambda (v)
|
(lambda (v)
|
||||||
(error 'yield "yield cannot be called when no generator is active"))))
|
(error 'yield "must be called in the context of a generator"))))
|
||||||
|
|
||||||
(define (yield value)
|
(define (yield value)
|
||||||
((current-yielder) value))
|
((current-yielder) value))
|
||||||
|
@ -44,23 +62,6 @@
|
||||||
(define (generator) (cont))
|
(define (generator) (cont))
|
||||||
generator))
|
generator))
|
||||||
|
|
||||||
;; not using parameterization
|
|
||||||
#;
|
|
||||||
(define-syntax-rule (generator body0 body ...)
|
|
||||||
(let ([tag (make-continuation-prompt-tag)])
|
|
||||||
(define yielder
|
|
||||||
(let ([yield (lambda (value) (shift-at tag k (set! cont k) value))])
|
|
||||||
yield))
|
|
||||||
(splicing-syntax-parameterize ([yield (make-rename-transformer #'yielder)])
|
|
||||||
(define (cont)
|
|
||||||
(reset-at tag
|
|
||||||
(let ([retval (begin body0 body ...)])
|
|
||||||
;; normal return:
|
|
||||||
(set! cont (lambda () retval))
|
|
||||||
retval))))
|
|
||||||
(define (generator) (cont))
|
|
||||||
generator))
|
|
||||||
|
|
||||||
(define stop-value (gensym))
|
(define stop-value (gensym))
|
||||||
|
|
||||||
(define-sequence-syntax in-generator
|
(define-sequence-syntax in-generator
|
||||||
|
|
Loading…
Reference in New Issue
Block a user