<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 6.00.6000.16414" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV>Hi Wayne,</DIV>
<DIV>I have been away for some days. Therefore I could not respond earlier. I 
hope others have cleared up things in the meantime. You can try 
"identifier-binding" as follows:</DIV>
<DIV>&nbsp;</DIV>
<DIV>(module a mzscheme<BR>&nbsp;(define-struct not-defined ())<BR>&nbsp;(define 
undefined? not-defined?)<BR>&nbsp;(define undefined 
(make-not-defined))<BR>&nbsp;(define-syntax (value/binding stx)<BR>&nbsp; 
(syntax-case stx ()<BR>&nbsp;&nbsp; ((value/binding 
symbol)<BR>&nbsp;&nbsp;&nbsp; (let ((binding-type (identifier-binding 
#'symbol)))<BR>&nbsp;&nbsp; #`(values<BR>&nbsp;&nbsp;&nbsp; 
#,(cond<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((eq? binding-type 'lexical) 
#'symbol)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((not binding-type) 
#'(namespace-variable-value 'symbol #t (lambda () 
undefined)))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (else&nbsp; 
#'symbol))<BR>&nbsp;&nbsp;&nbsp; '#,binding-type)))))<BR>&nbsp;(provide 
value/binding undefined?))</DIV>
<DIV>&nbsp;</DIV>
<DIV>(module b mzscheme<BR>&nbsp;(define b 1)<BR>&nbsp;(provide b))</DIV>
<DIV>&nbsp;</DIV>
<DIV>(require a b)<BR>(define c 2)<BR>(value/binding b) ; --&gt; 1 (b b b b 
#f)<BR>(value/binding c) ; --&gt; 2 #f<BR>(value/binding d) ; --&gt; 
#&lt;struct:not-defined&gt; #f<BR>(define d 3)<BR>(value/binding d) ; --&gt; 3 
#f<BR>(let ((e 4)) (value/binding e)) ; --&gt; 4 lexical</DIV>
<DIV>&nbsp;</DIV>
<DIV>(module x mzscheme<BR>&nbsp;(require a b)<BR>&nbsp;(define c 
20)<BR>&nbsp;(define-syntax print-value/binding<BR>&nbsp; (syntax-rules 
()<BR>&nbsp;&nbsp; ((print-value/binding x)<BR>&nbsp;&nbsp;&nbsp; (apply printf 
"~s ~s~n" (call-with-values (lambda () (value/binding x)) 
list)))))<BR>&nbsp;(print-value/binding b) ; prints 1 (b b b b 
#f)<BR>&nbsp;(print-value/binding c) ; 20 (#&lt;module-path-index&gt; c 
#&lt;module-path-index&gt; c #f)<BR>&nbsp;; (print-value/binding d) ; error: 
reference to an identifier before its definition: d<BR>&nbsp;(define d 
30)<BR>&nbsp;(print-value/binding d) ; 30 (#&lt;module-path-index&gt; d 
#&lt;module-path-index&gt; d #f)<BR>&nbsp;(let ((e 40)) (print-value/binding 
e))); prints 40 lexical</DIV>
<DIV>&nbsp;</DIV>
<DIV>(require x)</DIV>
<DIV>&nbsp;</DIV>
<DIV>Notice that the binding-type is determined at expansion/compilation time. 
Things&nbsp;may go wrong&nbsp;when&nbsp;a (current-namespace other-namespace) is 
done during execution time. Also notice that there are some subtle differences 
between modules and the top level. E.g, a module defined variable (d in the 
example) is seen in the module as being defined even above its 
definition,&nbsp;but it is not allowed to refer to this variable above its 
definition.</DIV>
<DIV>Jos</DIV>
<DIV>&nbsp;</DIV>
<DIV>(((((lambda(x)((((((((x x)x)x)x)x)x)x)x))<BR>&nbsp;&nbsp;&nbsp; 
(lambda(x)(lambda(y)(x(x y)))))<BR>&nbsp;&nbsp; (lambda(x)(x)x))<BR>&nbsp; 
(lambda()(printf "Greetings, Jos~n"))))</DIV>
<BLOCKQUOTE 
style="PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
  <DIV style="FONT: 10pt arial">----- Original Message ----- </DIV>
  <DIV 
  style="BACKGROUND: #e4e4e4; FONT: 10pt arial; font-color: black"><B>From:</B> 
  <A title=support@taxupdate.com 
  href="mailto:support@taxupdate.com">support@taxupdate.com</A> </DIV>
  <DIV style="FONT: 10pt arial"><B>To:</B> <A title=jos.koot@telefonica.net 
  href="mailto:jos.koot@telefonica.net">jos koot</A> </DIV>
  <DIV style="FONT: 10pt arial"><B>Cc:</B> <A title=plt-scheme@list.cd.brown.edu 
  href="mailto:plt-scheme@list.cd.brown.edu">plt-scheme@list.cd.brown.edu</A> 
  </DIV>
  <DIV style="FONT: 10pt arial"><B>Sent:</B> Monday, April 30, 2007 1:00 
PM</DIV>
  <DIV style="FONT: 10pt arial"><B>Subject:</B> Re: [plt-scheme] 
  namespace-variable-value</DIV>
  <DIV><BR></DIV>Jos,<BR><BR>On Fri, Apr 27, 2007 at 09:55:15PM +0200, jos koot 
  wrote:<BR>&gt;&nbsp;&nbsp; Why doesn't namespace-variable-value pick up the 
  mapping in the current-namespace?<BR><BR>&gt; It does, but the current 
  namespace is not used for the body of a module. Each module has its own 
  special 'namespace' such as to <BR>&gt; protect its variables and to make 
  syntaxes hygienic by not confusing module variables and syntaxes with those of 
  the importing <BR>&gt; module (or the top level) MHO.<BR><BR>Is there a way to 
  determine if a given symbol has been defined/imported into a 
  module's<BR>namespace (given only the symbol)?&nbsp; For 
  example:<BR><BR>(module x mzscheme<BR>&nbsp;&nbsp;&nbsp; (require 
  ...)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; ;; 
  test whether sym is defined or mapped to a value:<BR>&nbsp;&nbsp;&nbsp; 
  (define (defined/imported sym)<BR>...)&nbsp; <BR>)<BR><BR>It seems that 
  namespace-variable-value almost does this, but for imported<BR>mappings, it 
  would need the imported module name.<BR><BR>Wayne<BR></BLOCKQUOTE></BODY></HTML>