<i>But... isn't that what the author says?</i><p>Not really.  As pointed out above, the author doesn't appear to understand that the associative/non-associative distinction is literally undefined unless we're talking about a binary operator from a set to itself.  Saying that &#60; is a non-associative operator is wrong, something like saying that a vector is a non-odd number; as long as we're complaining about parenthesization, I'd suggest the author rephrase his statement and say that &#60; is a non-(associative operator), which at least means something.<p>An expression like a &#60; b &#60; c <i>should</i> be a type error - no possible parenthesization could make it a valid statement.<p>It's easy enough to come up with a way to make &#60; work like this, though, by changing the signature of &#60; so that it takes and returns a helper class instead of a numerical value, with automatic type coercions to that helper class from numerical values on both ends and booleans on the right edge.  This should be easy in a language like Scala, probably a 10 minute exercise if you know what you're doing.<p>If we make this helper class hold both the left edges of the chain and the right edges, and use the appropriate edge for each comparison, then the thing <i>is</i> associative.<p>((a &#62; b) &#62; c) &#62; d is the same as a &#62; (b &#62; (c &#62; d)), since in either case, each element will at some point be checked with &#62; against both of its neighbors, and only those neighbors, and the overall expression will be coerced to true if and only if the strict ordering is preserved at each check.  Process left to right, and it works out.  Even if we get messier and allow &#62;, &#62;=, &#60;, &#60;=, and == into the mix, we can mix and match everything, and the whole thing will only be true if every neighboring check is true.  The author's worry in the blog comments about '1 &#60; 2 &#62; 1' evaluating to true strike me as odd: that <i>should</i> evaluate to true under any reasonable definition of those operators.<p>So even if we do make &#60; into an operator such that it makes sense to talk about its associativity, it turns out to be associative.  Which is why mathematicians don't bother parenthesizing their chained &#60; expressions, there's just no ambiguity.<p>The article is plain wrong, IMO.