Re: Lexical syntax for boxes Alexey Radul 21 May 2013 12:19 UTC

On Tue, May 21, 2013 at 2:17 AM, John Cowan <xxxxxx@mercury.ccil.org> wrote:
> Alan Watson scripsit:
>> Defining `equal?` on boxes to be more like `equal?` on vectors of
>> length 1 would be more useful, I think.
>
> It might or it might not be, depending on one's needs.  You might want
> `equal?` to look right through boxes, or you might want to insist that
> boxes are `equal?` only if they are `eqv?`.  That's why a generalized
> equality predicate that can, but need not, descend into various things
> is so useful: you can tailor it to your needs and easily create your own
> best equality predicate(s) for each new circumstance.  That allows the
> exact details of what `equal?` does to be of mostly historical interest:
> it does the right thing in simple cases, and is implementation-dependent
> elsewhere.

I don't think that's right.  The whole point of boxes is to be
mutable; which means the correct treatment [1] thereof by equality
predicates is to compare by identity.  The only situation in which it
might be reasonable for an equality predicate to compare the contents
of boxes would be if they were both immutable.  In this case, however,
it may not be unreasonable to permit even eqv? and eq? to compare the
boxes' contents, on the grounds that an immutable box is a complete
no-op whose runtime representation may be worth eliding.  That sounds
too complicated to bring up, though.

[1] http://www.pipeline.com/~hbaker1/ObjectIdentity.html

~Alexey