[plt-scheme] eval-string namespace

From: Paulo Jorge de Oliveira Cantante de Matos (pocm at mega.ist.utl.pt)
Date: Wed Jul 30 08:33:46 EDT 2003

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
>> 
>> 




Posted on the users mailing list.