X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=src%2Futils.scm;h=eb20531fdc90680abfcd224e942d81afd510af43;hb=2c3c0bff524bdc8365f0c5e52b1b6a7d21e3099f;hp=015de6b68b5f52c9f882a518df9ef2f121e7dd81;hpb=c2473ff3eec8feb96efd299b0d1fc7f11e348362;p=gacela.git diff --git a/src/utils.scm b/src/utils.scm index 015de6b..eb20531 100644 --- a/src/utils.scm +++ b/src/utils.scm @@ -143,3 +143,20 @@ (optional-arguments-apply args values) (keyword-arguments-apply args values) (rest-arguments-apply args values)))) + + +;;; Continuations and coroutines + +(define (make-producer body) + (define resume #f) + (lambda (real-send) + (define send-to real-send) + (define (send value-to-send) + (set! send-to + (call/cc + (lambda (k) + (set! resume k) + (send-to value-to-send))))) + (if resume + (resume real-send) + (body send))))