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.

____________________
  Racket Users list:
  http://lists.racket-lang.org/users

Reply via email to