Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (import (rnrs)) ; for eof-object
- (define (make-coroutine-generator proc)
- (define return #f)
- (define resume #f)
- (define yield (lambda (v) (call/cc (lambda (r) (set! resume r) (return v)))))
- (lambda () (call/cc (lambda (cc) (set! return cc)
- (if resume
- (resume (if #f #f)) ; void? or yield again?
- (begin (proc yield)
- (set! resume (lambda (v) (return (eof-object))))
- (return (eof-object))))))))
- (define test (make-coroutine-generator
- (lambda (yield)
- (let loop ([i 0])
- (when (< i 3)
- (yield i)
- (loop (+ i 1)))))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement