Hi Jens - <br><br>Thanks for the example ;) <br><br>yinso <br><br><div><span class="gmail_quote">On 4/22/07, <b class="gmail_sendername">Jens Axel Søgaard</b> &lt;<a href="mailto:[email protected]">[email protected]
</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Hi Yin-So,<br><br>Matthew&#39;s hint about identifier-binding is probably what you need now.
<br>In more general situations you can keep track of the names (and/or<br>associated informations) by a define-like macro with the help<br>of a little bookkeeping.<br><br>(module names mzscheme<br>&nbsp;&nbsp; (provide register-name defined?)
<br><br>&nbsp;&nbsp; (require (prefix srfi: (lib &quot;1.ss&quot; &quot;srfi&quot;)))<br><br>&nbsp;&nbsp; (define defined-names &#39;())<br><br>&nbsp;&nbsp; (define (defined? name)<br>&nbsp;&nbsp;&nbsp;&nbsp; (srfi:member name defined-names module-identifier=?))<br><br>&nbsp;&nbsp; (define (register-name name)
<br>&nbsp;&nbsp;&nbsp;&nbsp; (cond [(defined? name)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(raise-syntax-error<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;define-once<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;format &quot;the name &#39;~a&#39; is already defined&quot;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (syntax-e name))
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name)]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(set! defined-names (cons name defined-names))])))<br><br>(module define-once mzscheme<br>&nbsp;&nbsp; (provide define-once)<br>&nbsp;&nbsp; (require-for-syntax names)<br><br>&nbsp;&nbsp; (define-syntax (define-once stx)
<br>&nbsp;&nbsp;&nbsp;&nbsp; (syntax-case stx ()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [(define-once name expr)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(register-name #&#39;name)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&#39;(begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(require names)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(define name expr))])))<br><br>(module test mzscheme
<br>&nbsp;&nbsp; (provide foo bar)<br>&nbsp;&nbsp; (require define-once)<br>&nbsp;&nbsp; (define-once foo 1)<br>&nbsp;&nbsp; (define-once bar 2)<br>&nbsp;&nbsp; ;(define-once bar 3)<br>&nbsp;&nbsp; )<br><br>(require test)<br>foo<br>bar<br><br><br>--<br>Jens Axel Søgaard<br><br></blockquote>
</div><br><br clear="all"><br>-- <br><a href="http://www.yinsochen.com">http://www.yinsochen.com</a><br>...continuous learning...