[racket] use variable(in separated file) mutually ?

From: 김태윤 (kty1104 at gmail.com)
Date: Sat Nov 13 06:10:03 EST 2010

omg thank you so much!!
that's just what I want it!

2010/11/13 Thomas Chust <chust at web.de>

> 2010/11/13 김태윤 <kty1104 at gmail.com>:
> > [...]
> > I was told by mailing list that read the racket guide unit section
> > but sorry I still don't understand.
> > [...]
>
> Hello,
>
> you have to use units here because modules do not allow mutually recursive
> dependencies. An example for your situation may look like this:
>
>        -----BEGIN "ab-sig.rkt"-----
>        #lang racket
>
>        (define-signature a^
>                (a))
>
>        (define-signature b^
>                (b))
>
>        (provide
>         (all-defined-out))
>        -----END "ab-sig.rkt"-----
>
>        -----BEGIN "a.rkt"-----
>        #lang racket
>        (require
>         "ab-sig.rkt")
>
>        (define-unit a@
>                (import b^)
>                (export a^)
>                (define a 1)
>                (printf "a@ sees b = ~s~%" b))
>
>        (provide
>         (all-defined-out))
>        -----END "a.rkt"-----
>
>        -----BEGIN "b.rkt"-----
>        #lang racket
>        (require
>         "ab-sig.rkt")
>
>        (define-unit b@
>                (import a^)
>                (export b^)
>                (define b 2)
>                (printf "b@ sees a = ~s~%" a))
>
>        (provide
>         (all-defined-out))
>        -----END "b.rkt"-----
>
>        -----BEGIN "ab.rkt"-----
>        #lang racket
>        (require
>         "ab-sig.rkt" "a.rkt" "b.rkt")
>
>        (define-values/invoke-unit/infer
>                (export a^ b^)
>                (link a@ b@))
>
>        (printf "ab.rkt sees a = ~s~%" a)
>        (printf "ab.rkt sees b = ~s~%" b)
>        -----END "ab.rkt"-----
>
> As you can see, the module dependencies are cycle free but the unit
> dependency
> between a@ and b@ is mutual.
>
> Note that, even though a@ and b@ can see each other's variables exported
> through
> the signatures a^ and b^ respectively, the units still have to be
> initialized
> in some order and hence one of the printf calls in a@ or b@ will show an
> undefined value when "ab.rkt" is run.
>
> I hope this helps :-)
>
> Ciao,
> Thomas
>
>
> --
> When C++ is your hammer, every problem looks like your thumb.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20101113/251927e7/attachment.html>

Posted on the users mailing list.