A question was posted about chained comparison operators and how they are interpreted in different languages.
Chaining comparison operators means that (x < y < z)
would be interpreted as ((x < y) && (y < z))
instead of as ((x < y) < z)
.
The comments on that question show that Python, Perl 6, and Mathematica support chaining comparison operators, but what other languages support this feature and why is it not more common?
A quick look at the Python documentation shows that this feature has been since at least 1996. Is there a reason more languages have not added this syntax?
A statically typed language would have problems with type conversion, but are there other reasons this is not more common?
Chained comparison is a feature of BCPL, since the late 1960s.
It should be more common, but I suspect it is not because it makes parsing languages more complex.
Benefits:
Drawbacks:
As to why not, my guesses are:
I think ICON is the original language to have this, and in ICON it falls out of the way that booleans are handled as special 'fail' tags with all other values being treated as true.
Scheme (and probably most other Lisp family languages) supports multiple comparison efficiently within its grammar:
This can be considered an ordinary function application of the
<
function with three arguments. See 6.2.5 Numerical Operations in the specification.Clojure supports chained comparison too.
The benefit is too small to justify complicating the language.
You don't need it that often, and it is easy to get the same effect cleanly with a few characters more.