By default, objects that are instances of different classes or that are instances of a non-transparent class are equal? only if they are eq? . Like transparent structures, two objects that are instances of the same transparent class (i.e., every superclass of the class has #f as its inspector) are equal? when their field values are equal? .
To customize the way that a class instance is compared to other instances by equal? , implement the equal<%> interface.
interface
equal-to? — Takes two arguments. The first argument is an object that is an instance of the same class (or a subclass that does not re-declare its implementation of equal<%> ) and that is being compared to the target object. The second argument is an equal? -like procedure of two arguments that should be used for recursive equality testing. The result should be a true value if the object and the first argument of the method are equal, #f otherwise.
equal-hash-code-of — Takes one argument, which is a procedure of one argument that should be used for recursive hash-code computation. The result should be an exact integer representing the target object’s hash code.
equal-secondary-hash-code-of — Takes one argument, which is a procedure of one argument that should be used for recursive hash-code computation. The result should be an exact integer representing the target object’s secondary hash code.
;;Caseinsensitivewords:;;Initialization;;Wedefineequalitytoignorecase:;;Thehashcodesneedtobeinsensitivetocasingaswell.;;We'lljustdowncasethewordandgetitshashcode.;;Wecancreateahashwithasingleword:;;Lookupintothehashshouldbecase-insensitive,sothat;;bothoftheseshouldreturn'value.;;Comparisonfailsifweuseanon-ci-word%: