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.

