&nbsp;<span class="q"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">2. How can I use the macro system to eliminate the &#39;yield-name&#39; part
<br>of the macro? </blockquote></span><br>One solution that works, but I do have a few problems with it.<br>I had to break the hygiene, which in this case might not be that bad, but it is not nice. More worringly for me, I&#39;m not sure why does it really work the way it works. It is a problem with my understanding of macros, but that might pass with time =)
<br><br>What would be a hygienic solution?<br><br>===========================<br>(require (lib &quot;control.ss&quot;))<br><br>(define-syntax (make-gen stx)<br>&nbsp; (syntax-case stx ()<br>&nbsp;&nbsp;&nbsp; [(mkg (name arg ...) body ...)<br>
&nbsp;&nbsp;&nbsp;&nbsp; (syntax-case (datum-&gt;syntax-object (syntax mkg) &#39;yield) ()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [yield (syntax<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (define (name arg ...)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (define (control-state) body ...)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (define (yield value) (control resume-here (set! control-state resume-here) value))
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (lambda () (prompt (control-state)))))])]))<br><br>(make-gen (make-step)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (yield 1)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (yield 2)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (yield 3)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;finished)<br><br>(define step (make-step))
<br><br>(step)(step)(step)(step)(step)<br><br>===========================<br><br>