Racket Coroutines
(require coroutines) | package: Coroutines |
See repository README.md or example.rkt
# Coroutines for Racket
Thanks to @soegaard @Ben Kenobi @pns11 & @4st on the Racket Discord
1 How to install
1. [Set your PATH environment variable](https://github.com/racket/racket/wiki/Set-your-PATH-environment-variable) so you can use ‘raco‘ and other Racket command line functions.
2. either look for ‘coroutines‘ in the DrRacket menu **File|Package Manager**, or run the ‘raco‘ command:
raco pkg install coroutines
example
#lang racket/base |
;; coroutines implementation from https://hillside.net/plop/plop2001/accepted_submissions/PLoP2001/dferguson0/PLoP2001_dferguson0_1.pdf |
;; example |
(require coroutines) |
(define (ping-procedure resume value) |
(displayln "Pinging 1") |
(resume pong value) |
(displayln "Pinging 2") |
(resume pong value) |
(displayln "Pinging 3") |
(resume pong value)) |
(define ping (coroutine-maker ping-procedure)) |
(define (pong-procedure resume value) |
(displayln "Ponging 1") |
(resume ping value) |
(displayln "Ponging 2") |
(resume ping value) |
(displayln "Ponging 3") |
(resume ping value)) |
(define pong (coroutine-maker pong-procedure)) |
(ping 1) |
“‘ #lang racket/base
(require coroutine)
(define (ping-procedure resume value) (displayln "Pinging 1") (resume pong value) (displayln "Pinging 2") (resume pong value) (displayln "Pinging 3") (resume pong value))
(define ping (coroutine-maker ping-procedure))
(define (pong-procedure resume value) (displayln "Pinging 1") (resume ping value) (displayln "Pinging 2") (resume ping value) (displayln "Pinging 3") (resume ping value))
(define pong (coroutine-maker pong-procedure))
(ping 1) “‘
result
“‘ Pinging 1 updating Pinging 1 updating Pinging 2 updating Pinging 2 updating Pinging 3 updating Pinging 3 updating 1 “‘