# 29nov23 Software Lab. Alexander Burger # Dining Philosophers # pil dining.l -dining~main + (load "@lib/simul.l") (symbols 'dining 'simul 'pico) (local) (*ForkA *ForkB *ForkC *ForkD *ForkE now think) (de now (Str) (prinl (tim$ (* 60 *Time)) " " (co) " " Str) ) (de think (Left Right) (loop (now "thinking") (pause (rand 180 240)) # 3 to 4 hours (now "hungry") (while (or (val Left) (val Right)) (now "waiting") (pause Left Right) ) (set Left (set Right (co))) (now "eating") (pause 20) # 20 minutes (set Left (set Right NIL)) (event Left) (event Right) ) ) (local) main (de main () (symbols '(dining simul pico)) (co 'Aristotle (think '*ForkA '*ForkB) ) (co 'Kant (think '*ForkB '*ForkC) ) (co 'Spinoza (think '*ForkC '*ForkD) ) (co 'Marx (think '*ForkD '*ForkE) ) (co 'Russell (think '*ForkE '*ForkA) ) )