omg thank you so much!!<div>that&#39;s just what I want it!</div><div><br><div class="gmail_quote">2010/11/13 Thomas Chust <span dir="ltr">&lt;<a href="mailto:chust@web.de">chust@web.de</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
2010/11/13 김태윤 &lt;<a href="mailto:kty1104@gmail.com">kty1104@gmail.com</a>&gt;:<br>
&gt; [...]<br>
<div class="im">&gt; I was told by mailing list that read the racket guide unit section<br>
&gt; but sorry I still don&#39;t understand.<br>
</div>&gt; [...]<br>
<br>
Hello,<br>
<br>
you have to use units here because modules do not allow mutually recursive<br>
dependencies. An example for your situation may look like this:<br>
<br>
        -----BEGIN &quot;ab-sig.rkt&quot;-----<br>
        #lang racket<br>
<br>
        (define-signature a^<br>
                (a))<br>
<br>
        (define-signature b^<br>
                (b))<br>
<br>
        (provide<br>
         (all-defined-out))<br>
        -----END &quot;ab-sig.rkt&quot;-----<br>
<br>
        -----BEGIN &quot;a.rkt&quot;-----<br>
        #lang racket<br>
        (require<br>
         &quot;ab-sig.rkt&quot;)<br>
<br>
        (define-unit a@<br>
                (import b^)<br>
                (export a^)<br>
                (define a 1)<br>
                (printf &quot;a@ sees b = ~s~%&quot; b))<br>
<br>
        (provide<br>
         (all-defined-out))<br>
        -----END &quot;a.rkt&quot;-----<br>
<br>
        -----BEGIN &quot;b.rkt&quot;-----<br>
        #lang racket<br>
        (require<br>
         &quot;ab-sig.rkt&quot;)<br>
<br>
        (define-unit b@<br>
                (import a^)<br>
                (export b^)<br>
                (define b 2)<br>
                (printf &quot;b@ sees a = ~s~%&quot; a))<br>
<br>
        (provide<br>
         (all-defined-out))<br>
        -----END &quot;b.rkt&quot;-----<br>
<br>
        -----BEGIN &quot;ab.rkt&quot;-----<br>
        #lang racket<br>
        (require<br>
         &quot;ab-sig.rkt&quot; &quot;a.rkt&quot; &quot;b.rkt&quot;)<br>
<br>
        (define-values/invoke-unit/infer<br>
                (export a^ b^)<br>
                (link a@ b@))<br>
<br>
        (printf &quot;ab.rkt sees a = ~s~%&quot; a)<br>
        (printf &quot;ab.rkt sees b = ~s~%&quot; b)<br>
        -----END &quot;ab.rkt&quot;-----<br>
<br>
As you can see, the module dependencies are cycle free but the unit dependency<br>
between a@ and b@ is mutual.<br>
<br>
Note that, even though a@ and b@ can see each other&#39;s variables exported through<br>
the signatures a^ and b^ respectively, the units still have to be initialized<br>
in some order and hence one of the printf calls in a@ or b@ will show an<br>
undefined value when &quot;ab.rkt&quot; is run.<br>
<br>
I hope this helps :-)<br>
<br>
Ciao,<br>
Thomas<br>
<font color="#888888"><br>
<br>
--<br>
When C++ is your hammer, every problem looks like your thumb.<br>
</font></blockquote></div><br></div>