[plt-scheme] auxiliary macros
I believe what you want is this:
(define-syntax define/y
(syntax-rules ()
[(_ yield-name (name arg ...) body ...)
(define (name arg ...)
(define (yield-name x)
(call/cc
(lambda (resume-here)
(set! name (lambda () (resume-here 'dummy)))
(exit-with x))))
(define exit-with #f)
(call/cc
(lambda (k)
(set! exit-with k)
body
...)))]))
(define/y yield (step)
(yield 1)
(yield 2)
(yield 3)
'finished)
You can now ask yourself two questions on improving this code:
1. How can I use control.ss so that I don't need two call/cc's to
implement a switch of control?
2. How can I use the macro system to eliminate the 'yield-name' part
of the macro?
Depends in which order you want to improve your skills.
;; ---
You may also realize that step is a non-re-entrant function. Argh.
But I didn't choose that part :-)
-- Matthias