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 <jos.k...@gmail.com> 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:* 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 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 <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.
>

-- 
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.

Reply via email to