<div dir="ltr">Daniel, I think it'll be worthwhile to direct your attention to this blog entry which goes into more details about why mutable pairs were removed in the first place.<br><br><a href="http://blog.racket-lang.org/2007/11/getting-rid-of-set-car-and-set-cdr.html">http://blog.racket-lang.org/2007/11/getting-rid-of-set-car-and-set-cdr.html</a><br>
</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Mar 5, 2014 at 4:15 PM, Jens Axel Søgaard <span dir="ltr"><<a href="mailto:jensaxel@soegaard.net" target="_blank">jensaxel@soegaard.net</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">(require compatibility/mlist)<br>
(mlist 1 2 3)<br>
<br>
See <a href="http://docs.racket-lang.org/compatibility/mlists.html?q=mlist#%28def._%28%28lib._compatibility%2Fmlist..rkt%29._mlist%29%29" target="_blank">http://docs.racket-lang.org/compatibility/mlists.html?q=mlist#%28def._%28%28lib._compatibility%2Fmlist..rkt%29._mlist%29%29</a><br>

<br>
2014-03-05 22:06 GMT+01:00 Daniel Carrera <<a href="mailto:dcarrera@gmail.com">dcarrera@gmail.com</a>>:<br>
<div><div class="h5">><br>
> On 5 March 2014 19:54, Matthias Felleisen <<a href="mailto:matthias@ccs.neu.edu">matthias@ccs.neu.edu</a>> wrote:<br>
>><br>
>><br>
>> Okay, now see mcons.<br>
><br>
><br>
><br>
> Neat... mcons, mcar, mcdr, mpair, set-mcar!, set-mcdr!<br>
><br>
> I notice that there is no mlist. Is there a shortcut similar to '(1 2 3) to<br>
> quote a list in a way that makes mutable pairs instead of regular pairs?<br>
><br>
> Cheers,<br>
> Daniel.<br>
><br>
><br>
>><br>
>><br>
>> On Mar 5, 2014, at 1:53 PM, Daniel Carrera wrote:<br>
>><br>
>> I see.<br>
>><br>
>> k is '(42 2 3) while l is '(1 2 3). This is what I expected to happen, but<br>
>> it is clearly not what was supposed to happen. I just tried the same example<br>
>> with Chicken, and for Chicken both k and l are equal to '(42 2 3).<br>
>><br>
>> Thanks for the explanation.<br>
>><br>
>> Cheers,<br>
>> Daniel.<br>
>><br>
>> On 5 March 2014 19:24, Matthias Felleisen <<a href="mailto:matthias@ccs.neu.edu">matthias@ccs.neu.edu</a>> wrote:<br>
>>><br>
>>><br>
>>> Try<br>
>>><br>
>>>  (define l (list 1 2 3))<br>
>>>  (define k l)<br>
>>><br>
>>> Now what does (set-car! k 42) do? What should it do?<br>
>>><br>
>>><br>
>>> On Mar 5, 2014, at 1:23 PM, Daniel Carrera wrote:<br>
>>><br>
>>> But isn't the final effect the same? The pair may be immutable, but I can<br>
>>> make a new pair and bind it to the old variable. The main difference that I<br>
>>> can see is that what I wrote is a macro, while I believe set-car! is<br>
>>> supposed to be a function. That could potentially break code.<br>
>>><br>
>>> Cheers,<br>
>>> Daniel.<br>
>>><br>
>>><br>
>>> On 5 March 2014 19:18, Matthias Felleisen <<a href="mailto:matthias@ccs.neu.edu">matthias@ccs.neu.edu</a>> wrote:<br>
>>>><br>
>>>><br>
>>>> No, set! mutates variable bindings while set-car! mutates cons cells<br>
>>>> (the first slot of a data structure).<br>
>>>><br>
>>>><br>
>>>> On Mar 5, 2014, at 1:13 PM, Daniel Carrera wrote:<br>
>>>><br>
>>>> > Hello,<br>
>>>> ><br>
>>>> > My understanding is that Racket intentionally does not provide<br>
>>>> > set-car! and set-cdr! and that this is one of the ways in which Racket is<br>
>>>> > not fully compatible with Scheme.<br>
>>>> ><br>
>>>> > Am I right to think that it is trivially easy to add these features to<br>
>>>> > Racket? Specifically, I'm thinking of:<br>
>>>> ><br>
>>>> ><br>
>>>> > (define-syntax set-car!<br>
>>>> >   (syntax-rules ()<br>
>>>> >     ((_ l new_car) (set! l (cons new_car (cdr l))))))<br>
>>>> ><br>
>>>> > (define-syntax set-cdr!<br>
>>>> >   (syntax-rules ()<br>
>>>> >     ((_ l new_cdr) (set! l (cons (car l) new_cdr)))))<br>
>>>> ><br>
>>>> ><br>
>>>> > Or did I miss something?<br>
>>>> ><br>
>>>> > Cheers,<br>
>>>> > Daniel.<br>
>>>> > --<br>
>>>> > When an engineer says that something can't be done, it's a code phrase<br>
>>>> > that means it's not fun to do.<br>
>>>> > ____________________<br>
>>>> >  Racket Users list:<br>
>>>> >  <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
>>>><br>
>>><br>
>>><br>
>>><br>
>>> --<br>
>>> When an engineer says that something can't be done, it's a code phrase<br>
>>> that means it's not fun to do.<br>
>>><br>
>>><br>
>><br>
>><br>
>><br>
>> --<br>
>> When an engineer says that something can't be done, it's a code phrase<br>
>> that means it's not fun to do.<br>
>><br>
>><br>
><br>
><br>
><br>
> --<br>
> When an engineer says that something can't be done, it's a code phrase that<br>
> means it's not fun to do.<br>
><br>
> ____________________<br>
>   Racket Users list:<br>
>   <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
><br>
<br>
<br>
<br>
--<br>
</div></div>--<br>
Jens Axel Søgaard<br>
<div class="HOEnZb"><div class="h5"><br>
____________________<br>
  Racket Users list:<br>
  <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
</div></div></blockquote></div><br></div>