[swift-evolution] [Review] Tuple comparison operators (was: Add a Lazy flatMap for Sequences of Optionals)

Dave Abrahams dabrahams at apple.com
Tue Dec 22 19:11:45 CST 2015


> On Dec 22, 2015, at 2:44 PM, Guillaume Lessard via swift-evolution <swift-evolution at swift.org> wrote:
> 
> 
>> On 22 déc. 2015, at 14:03, Kevin Ballard via swift-evolution <swift-evolution at swift.org> wrote:
>> 
>> On Tue, Dec 22, 2015, at 10:39 AM, Guillaume Lessard via swift-evolution wrote:
>>> 
>>> The justification for making Tuples comparable pretty much consists of hand-waving.
>>> Why should (0,3,4) be smaller than (0,5,0)? Beats me.
>>> Why would it be the other way around? Also beats me.
>> 
>> You're proposing that there isn't a clear reason for it to behave the way it is, but you haven't given any justification for this claim.
> 
> My job here is to disprove, not to prove. I think that the proposed definition is lacking.
> 
> 
>> I say there is in fact a clear reason, and that reason is that lexicographical order is a pretty common assumption.
> 
> Is lexicographical order the same the world over? No!

Yes, the mathematical definition of lexicographical order (the only definition that can apply here) is the same everywhere.

> A “pretty common assumption” is a weak foundation.
> 
> As I said earlier: “Finally, I would like to note that I would support a free-standing function with a clear name that does the same thing as the proposed overloads of the comparison operator.”
> 
> In other words:
> - Provide elementwiseComparison<NTupleOfComparables>(t1,t2).
> - Don’t overload <
> 
> The free-standing function provides all of the desired convenience, without messing with <
> 
> 
>>> Comparability is domain-specific. The standard library cannot know what an arbitrary Tuple means.
>> 
>> The standard library cannot know this for equality either.
> 
> This proposal offers a simple *and strict* definition of Equality. (Is there a stricter definition that doesn’t devolve into identity?) Anyone who needs a looser definition can re-define it for their domain.
> 
> Comparability is a different beast. Comparability makes sense with scalars. With groups of values there is a required step to map the grouping onto a scalar score, be it magnitude (like vectors) or secret sauce (like Consumer Reports scores.)
> 
> (Note that I was quite deliberate in my choice of tuples (0,3,4) and (0,5,0). As vectors: same magnitude.)
> 
> 
>> Heck, we provide a comparison operator on strings even though the particular comparison it implements isn't always what you want (for example, it's case-sensitive and you may want case-insensitive comparison) but nobody is arguing that strings shouldn't be comparable.
> 
> I don't love using comparison operators on strings (gotchas abound), but at least the problem of alphabetizing words is taught in elementary schools. Not so for ordering arbitrary multidimensional data.
> 
> Sincerely,
> Guillaume Lessard
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

-Dave





More information about the swift-evolution mailing list