[plt-scheme] eval-string namespace

From: Saint Katsmall T. Wise, Esquire (kela_bit at netvision.net.il)
Date: Wed Jul 30 12:23:08 EDT 2003

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>

Posted on the users mailing list.