Okay, now see mcons. On Mar 5, 2014, at 1:53 PM, Daniel Carrera wrote:
> I see. > > k is '(42 2 3) while l is '(1 2 3). This is what I expected to happen, but it > is clearly not what was supposed to happen. I just tried the same example > with Chicken, and for Chicken both k and l are equal to '(42 2 3). > > Thanks for the explanation. > > Cheers, > Daniel. > > On 5 March 2014 19:24, Matthias Felleisen <matth...@ccs.neu.edu> wrote: > > Try > > (define l (list 1 2 3)) > (define k l) > > Now what does (set-car! k 42) do? What should it do? > > > On Mar 5, 2014, at 1:23 PM, Daniel Carrera wrote: > >> But isn't the final effect the same? The pair may be immutable, but I can >> make a new pair and bind it to the old variable. The main difference that I >> can see is that what I wrote is a macro, while I believe set-car! is >> supposed to be a function. That could potentially break code. >> >> Cheers, >> Daniel. >> >> >> On 5 March 2014 19:18, Matthias Felleisen <matth...@ccs.neu.edu> wrote: >> >> No, set! mutates variable bindings while set-car! mutates cons cells (the >> first slot of a data structure). >> >> >> On Mar 5, 2014, at 1:13 PM, Daniel Carrera wrote: >> >> > Hello, >> > >> > My understanding is that Racket intentionally does not provide set-car! >> > and set-cdr! and that this is one of the ways in which Racket is not fully >> > compatible with Scheme. >> > >> > Am I right to think that it is trivially easy to add these features to >> > Racket? Specifically, I'm thinking of: >> > >> > >> > (define-syntax set-car! >> > (syntax-rules () >> > ((_ l new_car) (set! l (cons new_car (cdr l)))))) >> > >> > (define-syntax set-cdr! >> > (syntax-rules () >> > ((_ l new_cdr) (set! l (cons (car l) new_cdr))))) >> > >> > >> > Or did I miss something? >> > >> > Cheers, >> > Daniel. >> > -- >> > When an engineer says that something can't be done, it's a code phrase >> > that means it's not fun to do. >> > ____________________ >> > Racket Users list: >> > http://lists.racket-lang.org/users >> >> >> >> >> -- >> When an engineer says that something can't be done, it's a code phrase that >> means it's not fun to do. > > > > > -- > When an engineer says that something can't be done, it's a code phrase that > means it's not fun to do.
____________________ Racket Users list: http://lists.racket-lang.org/users