(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))))
|
|
|