Thanks. That is helpful. James
> On Jul 31, 2018, at 10:28 PM, Richard O'Keefe <[email protected]> wrote: > > Can I give a reference? Well, I did: the ANSI Smalltalk standard. > Specifically, section 5.7.8.2, the refinement for <sequenceReadableCollection> > > Numbers are governed by section 5.6.7.1, which requires numbers that are > compared for equality to be converted to a common representation, which > in this case requires (sigh) integers to be converted to floats. With > that definition it is possible to find integers x z and a float y such > that x = y and y = z are true but x = z is false, which is a very bad > thing. My Smalltalk tries to be ANSI conformant, but some things are > just too broken to live with, and that's one of them. (The rule should > always be to convert in a way that loses no information.) > > It may well seem strange to you, but "equivalence" (#=) in Smalltalk > is not coupled to "ordering" (the Magnitude methods) and never has been. > For example, #= compares the characters of strings, which are equal iff > they have the same codepoint. But #< and the other magnitude methods > use an "implementation-defined" collation order, which could, for example, > ignore alphabetic case. So it would be entirely consistent with the > standard and historic practice to have 'A' <= 'a' and 'a' <= 'A' but > 'A' ~= 'a'. This is not merely a theoretical possibility; I just tried > it in GNU Smalltalk. > > There was a serious historic bug in many Smalltalks where > 'a' = #a was true (using string comparison) but > #a = 'a' was false (using identity). This may well be > why the standard insists on the classes (not the species) > being the same, to ensure that <string> = <symbol> is > consistent with <symbol> = <string>. > > On 1 August 2018 at 16:47, James Foster <[email protected] > <mailto:[email protected]>> wrote: > @Richard O’Keefe: I’m trying to find the place in the ANSI Standard you are > citing. All I’ve found so far is at 5.3.1.1 <http://5.3.1.1/>: > > The meaning of "equivalent" cannot be precisely defined but the intent is > that two objects are > considered equivalent if they can be used interchangeably. Conforming > protocols may choose to > more precisely define the meaning of "equivalent”. > > Can you provide a reference for your assertion that objects must be of the > same class in order to be equivalent? > > How about other comparisons between objects of different classes? Is 1.9 < 2? > Is 2.1 > 2? How about 2.0 = 2? Is #a < ‘b’? is #b > ‘a’? How about #a = ‘a’? > It seems strange to suggest that an object can be less than or greater than, > but not equal to! > > James > >> On Jul 31, 2018, at 9:24 PM, Richard O'Keefe <[email protected] >> <mailto:[email protected]>> wrote: >> @James Foster: 100%. There are no exceptions >> >> On 1 August 2018 at 02:05, James Foster <[email protected] >> <mailto:[email protected]>> wrote: >> To what extent is it required by ANSI that objects be of the same class? >
