[plt-scheme] eval-string namespace
Your problem in this example is that call-it is only provided from
caller to test. test has to provide it again if it wants it to find its
way to the top level.
Methinks that eval-string, like eval, works with current-namespace. You
can create a new namespace (not sure what function does that) and put
call-it in the environment using (eval `(define call-it ,call-it)). Then
you would be able to call call-it even if it is not in the top level.
Yours,
Katsmall T. Wise, Esquire
Paulo Jorge de Oliveira Cantante de Matos wrote:
> For list-related administrative tasks:
> http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>
>Hi again,
>
>Ok, my situation seems now to be even worse.
>I've provided all my functions, still I'm not able to call them from
>toplevel. Check the following simple example:
>caller.scm:
>(module caller mzscheme
>
> (require "test.scm")
>
> (define (call-it)
> (bar))
>
> (provide call-it))
>
>test.scm:
>(module test mzscheme
>
> (require (lib "string.ss"))
>
> (define (foo)
> (eval-string (read-line)))
>
> (define (bar)
> (display "Done"))
>
> (provide foo bar))
>
>Now I execute caller.scm:
>
>
>>(require "caller.scm")
>>(call-it)
>>
>>
>(bar)
>
>. . reference to undefined identifier: bar
>
>
>Why can't I call bar if they are on toplevel (since I provided them)?
>Can't foo and bar be inside a module for me to call them?
>
>Best regards,
>
>Paulo Matos
>
>
>
>>From: Robby Findler <robby at cs.uchicago.edu>
>>To: Paulo Jorge de Oliveira Cantante de Matos <pocm at mega.ist.utl.pt>
>>Cc: PLT Scheme ML <plt-scheme at list.cs.brown.edu>
>>Subject: Re: [plt-scheme] eval-string namespace
>>Date: Tue, 29 Jul 2003 16:24:20 -0500
>>
>>When you provide bar, the `require' is putting bar into the toplevel
>>namespace. Also, when you call eval-string, that code will refer to the
>>toplevel namespace. If you don't provide bar, then it won't be in the
>>toplevel namespace, so the eval-string won't find it.
>>
>>The point here is that `eval-string' is not lexically sensitive in any
>>way. It always compiles free identifiers in the input expression to
>>refer to the toplevel -- not the place where the eval-string was
>>called.
>>
>>Robby
>>
>>At 29 Jul 2003 22:15:29 +0000, Paulo Jorge de Oliveira Cantante de
>>Matos wrote:
>>
>>
>>> For list-related administrative tasks:
>>> http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>>>
>>>Hi all,
>>>
>>>Check the following:
>>>(module test mzscheme
>>>
>>> (require (lib "string.ss"))
>>>
>>> (define (foo)
>>> (eval-string (read-line)))
>>>
>>> (define (bar)
>>> (display "Done"))
>>>
>>> (provide foo))
>>>
>>>If I run this, require test.scm and enter bar for read-line I get
>>>
>>>
>that
>
>
>>>bar is undefined. But it'll work alright if I provide bar. Why?
>>>I don't understand this behaviour, it's definitely not what I
>>>
>>>
>expected.
>
>
>>>In the manual there is no mention to this situation, which is I might
>>>say strange and boring since I have in the module 20 functions that
>>>
>>>
>can
>
>
>>>be called through eval-string that I don't want to provide.
>>>
>>>Any suggestions?
>>>
>>>Best regards,
>>>
>>>Paulo J. Matos
>>>
>>>
>>>
>>>
>
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20030730/c8bf5a0e/attachment.html>