(unearthing an old topic to provide an answer)<br><br><div class="gmail_quote">On Wed, Mar 10, 2010 at 13:51, Noel Welsh <span dir="ltr">&lt;<a href="mailto:noelwelsh@gmail.com">noelwelsh@gmail.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div class="im">On Wed, Mar 10, 2010 at 11:24 AM, Laurent &lt;<a href="mailto:laurent.orseau@gmail.com">laurent.orseau@gmail.com</a>&gt; wrote:<br>


<br>
&gt; Searching for my way through macros (and seeing some shiny lights ahead), I<br>
&gt; wanted to make a getter/setter helper for class fields.<br>
&gt; Here is the setter I came up with:<br>
&gt;<br>
&gt;&gt; (define-syntax (setter stx)<br>
&gt;&gt;   (syntax-case stx ()<br>
&gt;&gt;     [(_ id)<br>
&gt;&gt;      (with-syntax ([set-id (symbol-append* &quot;set-&quot; #&#39;id)]<br>
&gt;&gt;                    [val (gensym)])<br>
&gt;&gt;        #&#39;(define/public (set-id val) (set! id val))<br>
&gt;&gt;        )]<br>
&gt;&gt;     [(_ id1 id2 ...)<br>
&gt;&gt;      #&#39;(begin (setter id1)<br>
&gt;&gt;               (setter id2 ...))]<br>
&gt;&gt;     ))<br>
&gt;&gt;<br>
<br>
</div>You don&#39;t need the gensym. Hygiene will take of this automatically.<br></blockquote><div><br>(Now I&#39;ve finally learned that all such identifiers are renamed.)<br> </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">


So, the following works:<br>
<div class="im"><br>
(define-syntax (setter stx)<br>
  (syntax-case stx ()<br>
    [(_ id)<br>
</div>     (with-syntax ([set-id (symbol-append* &quot;set-&quot; #&#39;id)])<br>
<div class="im">       #&#39;(define/public (set-id val) (set! id val))<br>
       )]<br>
    [(_ id1 id2 ...)<br>
     #&#39;(begin (setter id1)<br>
              (setter id2 ...))]<br>
    ))<br>
<br>
</div>I don&#39;t know how to solve your other problem other than by<br>
hygienically introducing the identifier.<br></blockquote><div><br>I probably didn&#39;t understand that last bit of your answer at the time,<br>but the seemingly right way to solve the problem above is to use:<br><br>(datum-&gt;syntax #&#39;id (symbol-append* &quot;set-&quot; #&#39;id) #&#39;id) <br>

<br>This creates an identifier which &quot;context&quot; is the same as that of id.<br>It was much simpler than I feared.<br><br>No, I wonder why such getter/setter feature does not exist<br>by default in Racket&#39;s class system, since something similar<br>

already exists for structs.<br>Is it because it is considered malpractice, or simply because<br>there has been no real need to implement that, or... ?<br><br><br><br></div></div>