Advertisement
Guest User

Untitled

a guest
May 12th, 2017
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scheme 0.75 KB | None | 0 0
  1.  
  2. (import (rnrs)) ; for eof-object
  3. (define (make-coroutine-generator proc)
  4.   (define return #f)
  5.   (define resume #f)
  6.   (define yield (lambda (v) (call/cc (lambda (r) (set! resume r) (return v)))))
  7.   (lambda () (call/cc (lambda (cc) (set! return cc)
  8.                               (if resume
  9.                                   (resume (if #f #f))  ; void? or yield again?
  10.                                   (begin (proc yield)
  11.                                          (set! resume (lambda (v) (return (eof-object))))
  12.                                          (return (eof-object))))))))
  13.  
  14.  
  15. (define test (make-coroutine-generator
  16.               (lambda (yield)
  17.                 (let loop ([i 0])
  18.                   (when (< i 3)
  19.                     (yield i))))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement