[cdr-discuss] EQUALS, COMPARE and HASH-CODE

Marco Antoniotti marcoxa at cs.nyu.edu
Tue Mar 1 15:37:13 UTC 2011


On Mar 1, 2011, at 16:20 , Willem Broekema wrote:

> On Tue, Mar 1, 2011 at 12:18 PM, Marco Antoniotti <marcoxa at cs.nyu.edu> wrote:
>> Hi
>> here is the second iteration for the "equality and comparison" proposal.
> 
> Marco,
> 
> I'm interested in this proposal as the need for custom equality
> predicates and hash tables has come up in my work.
> Here's feedback on the version you just sent:
> 
> - These example results seem wrong:
> 
>  cl-prompt> (EQUALS "FOO" "Foo")
>  T
>  cl-prompt> (EQUALS "FOO" "Foo" :case-sensitive-p nil)
>  NIL

Thanks, I will fix it.

> - That EQUALS (a array) (b array) looks at array-total-size instead of
> the exact dimensions is surprising to me.

I guess I was lazy.  What would be a fix for this?


> - Why does this return error, why is it not applying the (T T) method
> that would return /= ?
> 
>  cl-prompt> (COMPARE (make-array 3 :initial-element 0) (vector 1 2 42))
>  Error: Uncomparable objects #(0 0 0) and #(1 2 42).

Sorry.  Bad cut'n'paste. It shoudl return /=.

> - It seems EQUALS and HASH-CODE are not usable in combination for hash
> tables, if the keys are numbers (sxhash of = numbers of different
> types, like 2 and 2.0, can be different) or arrays (sxhash could look
> at dimensions, not just array-total-size). That would be unfortunate.

The original proposal did not include HASH-CODE and I am ambivalent about it.  In general, there is no way even in Java to enforce the protocol; so HASH-CODE should just be thought as a hook for possible future use.  Of course, relying on SXHASH is dubious to start with, given what its entry says and considering that there is not even a guarantee that GETHASH uses it (AFAIK).

If this is too controversial, it should be removed.

Cheers
--
Marco Antoniotti






More information about the cdr-discuss mailing list