Racket Coroutines
1 How to install
8.18

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 “‘