4 ms·
> If you need to custom behavior, then EQUALP is a generic function that can be overridden for your data types. EQUALP is not a generic function. > EQ differs
by moonchild 4y ago
> If you need to custom behavior, then EQUALP is a generic function that can be overridden for your data types.
EQUALP is not a generic function.
> EQ differs from EQL only by having undefined behavior on integers and characters, because that gives implementations the freedom to box those datatypes or not while still guaranteeing that EQ is always a pointer-comparison
The distinction is more subtle than that. EQ could have been defined to have consistent behaviour for numbers and characters, such that eg (eq x x) would always be true (but (eq x y) would not be implied by (eql x y)), but it was not. Such a definition would have been easier to understand, and would not have prevented implementations from using efficient immediate representations for numbers and characters.
> = is numeric equality, which is different than value equality because 0.0 is = to -0.0 but not EQL to it
Only on implementations which distinguish negative zero. The standard explicitly calls this out. A better example is 3 vs 3.0.