Hi Jos, >But some of them I want to undefine. Isn't it easier to make your own restricted #lang and then use make-module-evaluator? Sorry to butt in.
Deren On Thu, Aug 27, 2015 at 1:24 PM, Jos Koot <[email protected]> wrote: > 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 > > -- > 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. > -- 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.

