Advertisement
Guest User

Untitled

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