31 lines
812 B
Racket
31 lines
812 B
Racket
#lang racket/base
|
|
|
|
(require "standard-thread.rkt")
|
|
(require "conversation.rkt")
|
|
(require racket/set)
|
|
(require racket/match)
|
|
(require racket/class)
|
|
|
|
(define r (make-room))
|
|
(define t1 (standard-thread (lambda ()
|
|
(define h (join-room r))
|
|
(error 'omg "t1 exiting"))))
|
|
(define t2 (standard-thread (lambda ()
|
|
(define h (join-room r))
|
|
(+ 1 2))))
|
|
(define t3 (standard-thread (lambda ()
|
|
(define h (join-room r))
|
|
(send h depart 'here-is-my-reason))))
|
|
|
|
(define h (join-room r))
|
|
(let loop ((seen (set)) (count 0))
|
|
(define m (send h listen))
|
|
(write m)
|
|
(newline)
|
|
(match m
|
|
((arrived who) (loop (set-add seen who) (+ count 1)))
|
|
((departed _ _) (if (and (= count 1) (= (set-count seen) 3))
|
|
'done
|
|
(loop seen (- count 1))))
|
|
(else (loop seen count))))
|