[racket] set! racket behaviour

From: Neil Toronto (neil.toronto at gmail.com)
Date: Mon Oct 31 14:11:00 EDT 2011

You could also make your intentions more explicit using

     #lang racket
     (define counter (box 0))

In the REPL, you would then do

     (set-box! counter (add1 (unbox counter)))

Neil T

On 10/31/2011 11:20 AM, David Vanderson wrote:
> I think you are running into the issue described here:
> http://docs.racket-lang.org/guide/module-set.html
>
> "Along the same lines, when a module contains no set!
> <http://docs.racket-lang.org/reference/set_.html#%28form._%28%28quote._%7E23%7E25kernel%29._set%21%29%29>
> of a particular identifier that is defined within the module, then the
> identifier is considered a constant that cannot be changed—not even by
> re-declaring the module."
>
> Try in your definitions window:
> #lang racket
> (define counter 0)
> (set! counter 0)
>
>
> Thanks,
> Dave
>
> On 10/31/2011 09:58 AM, jkaczorek at aol.pl wrote:
>> Hi,
>>
>> I’m using DrRacket.
>> In an edit window I have written:
>>
>> #lang racket
>> (define counter 0)
>>
>> I’m pressing “Run” button and next, in a command line, after running a
>> command:
>>
>> (set! counter (add1 counter))
>>
>> I receive a message “set!: cannot modify a constant: counter”
>>
>> The problem can be resolved by changing the language (Language/Choose
>> language/R5RS and unchecking “Disallow redefinition of initial
>> binding”) but I suppose that in this way I can lose an access to the
>> racket libraries.
>> Of course, I realize, that redefinition of the variables is not good
>> (functional) programming style but sometimes it’s necessary. Is there
>> a possibility of such modifications without changing language?
>>
>> Jerzy


Posted on the users mailing list.