chicken-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Chicken-users] Question about set-car! and set-cdr!


From: Daniel Carrera
Subject: Re: [Chicken-users] Question about set-car! and set-cdr!
Date: Thu, 6 Mar 2014 21:03:06 +0100


On 6 March 2014 20:04, John Cowan <address@hidden> wrote:
Ivan Shmakov scripsit:

>  >> Maybe this could be addressed by splitting the "scheme" module of
>  >> chicken into a "scheme-pure" for the sake of safety,
>  >> "scheme-mutations" having the rest and make "scheme" importing and
>  >> reexporting both sets of bindings.
>
>       That’s what the Racket folks did: they have their own Scheme
>       dialect without mutable pairs, and they have the “standard”
>       Scheme(s) available as an option.

R6RS does what Daniel suggests, splitting at the module level only:
set-car! and set-cdr! are in a separate module, and if it's not imported
anywhere you know all pairs are functional, but there is only one
species of pairs.  Racket makes normal pairs functional, and provides a
separate data structure, not interoperable with pairs, which is mutable.
That means if you are going to mutate anything, you have to potentially
change all your code to use mpairs instead of pairs, and duplicate it
for parts that should work on pairs.  IMHO not a win.

The idea is from Jörg, not me, but I think it's a great idea. I think you made a good case for making pairs functional by default, but being able to import set-car! and set-cdr!. I can see the hassle of having to rewrite your code when you decide you need set-car!

The Racket blog post argues that library developers have to deal with the possibility that lists they use might mutate. I haven't decided what I think about that. My first impulse is that if the user wants to shoot himself in the foot by mangling a list that he's passing to an external library, that is not the library designer's problem. But I might be missing something.

I am not experienced with reading RnRS standards, but my impression is that R7RS does not require that set-car! and set-cdr! be moved to a separate library.

Cheers,
Daniel.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]