Hi Jens Axel
That's a very clear answer. Thanks.
I don't know why procedures acting on namespaces treat directly imported
identifiers differently than imported identifiers.May be there is a reason,
but don't bother, Of cource it is always nice to know how things work, but
in the present case I am happy to know how to handle the map? argument,
even without knowing the reason the inclusion of a map? argument in a
number of functions actnig on namespaces. I am sure it can be useful in
some cases, but I never have encountered those cases. 
 
Of course +1 to the idea of adding a map? argument to namespace-undefine-
variable!.
 
Thanks again, Jos

  _____  

From: [email protected] [mailto:[email protected]] On
Behalf Of Jens Axel Søgaard
Sent: viernes, 28 de agosto de 2015 13:48
To: Jos Koot
Cc: Racket-Users List
Subject: Re: [racket-users] namespace-undefine-variable! question


As far as I can tell a namespace knows if an identifier is defined directly
in the module or if it is imported. 
If map? is #t then, imported identifiers are handled - and if map? is #f
then only identifiers defined directly in the module is handled. Since
namespace-undefined-variable! has no map? argument, you can't undefine
imported variables.

Why the map? argument is missing from namespace-undefined-variable! I don't
know

/Jens Axel


2015-08-27 19:24 GMT+02:00 Jos Koot <[email protected]>:



Thanks for your prompt and clear reply.
I admit I don't fully understand the map? argument.
Just by trying out I know that for my purposes I always have to provide
true for the map? argument.
Meanwhile I insert the namespace-set-variable-value! line with true map?
argument, as you suggest.
Thanks again,
Jos

  _____  

From: [email protected] [mailto:[email protected]] On
Behalf Of Jens Axel Søgaard
Sent: jueves, 27 de agosto de 2015 17:35
To: Jos Koot
Cc: Racket-Users List
Subject: Re: [racket-users] namespace-undefine-variable! question


The issue here is whether the namespance's identifier mapping is used or
not. 

The documentation for namespace-undefine-variable! says:


    Removes the sym variable, if any, in the top-level environment of
namespace in 
    its base phase. The namespace’s identifier mapping (see Namespaces) is
     unaffected.



We can see that  list  is use the identifier mapping by changing the second
argument of namespace-variable-value to #f.


    #lang racket
    (define ns (make-base-namespace))
    (namespace-variable-value 'list #f (λ () 'not-found) ns)

which evaluates to 'not-found.

Inserting your own non-imported value for  list  makes the identifier non-
imported and has
the happy side-effect of making namespace-undefined-variable! capable of
removing the
binding from namespace.

In some sense  namespace-undefined-variable!  miss an map? argument.
Your solution: insert, then undefine  seem to be the best solution for now.

/Jens Axel

you n



2015-08-27 16:53 GMT+02:00 Jos Koot <[email protected]>:



The following works:
 
#lang racket/base
#;1 (define ns (make-base-namespace))
#;2 (namespace-variable-value 'list #t (λ () 'not-found) ns)
; -> #<procedure:print-syntax-width>
#;3 (namespace-set-variable-value! 'list 'whatever (λ () #f) ns)
#;4 (namespace-undefine-variable! 'list ns)
#;5 (namespace-variable-value 'list#t (λ () 'not-found) ns)
; -> not-found
 
But when I omit line 3 it does not work:
 

#lang racket/base
#;1 (define ns (make-base-namespace))
#;2 (namespace-variable-value 'list #t (λ () 'not-found) ns) ; ->
#<procedure:list>
#;4 (namespace-undefine-variable! 'list ns)
;-> error namespace-undefine-variable!: given name is not defined
;       name: list


This I did with: Welcome to DrRacket, version 6.2.0.5--2015-07-
06(d6fa581/a) [3m].
Code in the definitions window. The problem is not typical for 'list only.
The same happens with (at least some) other variables of a base-namespace.
 
I have no clue why commenting out line 3 gives an error.
Do I misinterpret the docs on namespaces?
 
Thanks, Jos
 
PS I use a base-namespace in a toy interpreter.
It allows me to easily borrow all variables from a base-namespace.
But some of them I want to undefine.

 
 
 



-- 
You received this message because you are subscribed to the Google Groups
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an
email to [email protected].
For more options, visit https://groups.google.com/d/optout.





-- 

-- 
Jens Axel Søgaard






-- 

-- 
Jens Axel Søgaard


-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to