(define resume '*) (define (makecoroutine proc) (let ((lcs '*)) (letrec ((localres (lambda (co v) (let ((v (call/cc (lambda (k) (set! lcs k) (co v))))) (set! resume localres) v))) (newcoroutine (lambda (v) (lcs v)))) (call/cc (lambda (exit) (proc (localres exit newcoroutine)) (error "End of coroutine"))))))