|
|
- (import urn/control/prompt ())
-
- (defun run-tasks (&tasks) ; 1
- (loop [(queue tasks)] ; 2
- [(empty? queue)] ; 2
- (call/p 'task (car queue)
- (lambda (k)
- (when (alive? k)
- (push-cdr! queue k)))) ; 2
- (recur (cdr queue))))
-
- (defun yield ()
- (abort-to-prompt 'task))
-
- (run-tasks
- (lambda ()
- (map (lambda (x)
- (print! $"loop 1: ~{x}")
- (yield))
- (range :from 1 :to 5)))
- (lambda ()
- (map (lambda (x)
- (print! $"loop 2: ~{x}")
- (yield))
- (range :from 1 :to 5))))
-
|