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: jensaxelsoega...@gmail.com [mailto:jensaxelsoega...@gmail.com] 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 <file:///Applications/Racket%20v6.2/doc/reference/syntax- model.html?q=namespace-va#%28tech._base._phase%29> base phase. The namespace’s <file:///Applications/Racket%20v6.2/doc/reference/syntax- model.html?q=namespace-va#%28tech._identifier%29> identifier mapping (see Namespaces <file:///Applications/Racket%20v6.2/doc/reference/syntax- model.html?q=namespace-va#%28part._namespace-model%29> ) 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 <jos.k...@gmail.com>: 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 racket-users+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout. -- -- 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 racket-users+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.