Soporte de lenguaje para operadores de comparación encadenados (x <y <z)

Se publicó una pregunta sobre operadores de comparación encadenados y cómo se interpretan en diferentes idiomas.

Encadenar operadores de comparación significa que (x < y < z) se interpretaría como ((x < y) && (y < z)) lugar de como ((x < y) < z) .

Los comentarios sobre esa pregunta muestran que Python, Perl 6 y Mathematica admiten el encadenamiento de operadores de comparación, pero ¿qué otros idiomas admiten esta función y por qué no es más común?

Un vistazo rápido a la documentación de Python muestra que esta característica ha sido desde al menos 1996. ¿Hay alguna razón por la que más idiomas no hayan agregado esta syntax?

Un lenguaje estáticamente tipado tendría problemas con la conversión de tipo, pero ¿hay otras razones por las que esto no es más común?

Debería ser más común, pero sospecho que no porque hace que el análisis de los lenguajes sea más complejo.

Beneficios:

  • Defiende el principio de la menor sorpresa
  • Lee como se enseña la matemática
  • Reduce la carga cognitiva (ver los 2 puntos anteriores)

Inconvenientes:

  • La gramática es más compleja para el lenguaje
  • Caso especial azúcar sintáctico

En cuanto a por qué no, mis conjeturas son:

  • El (los) autor (es) de la lengua no pensaron en ello
  • Está en la lista de ‘buenos amigos’
  • Se decidió que no era lo suficientemente útil como para justificar la implementación

El beneficio es demasiado pequeño para justificar la complicación del lenguaje.

No lo necesita con tanta frecuencia, y es fácil obtener el mismo efecto limpiamente con unos pocos caracteres más.

Scheme (y probablemente la mayoría de los demás lenguajes de la familia Lisp) admite una comparación múltiple de manera eficiente dentro de su gramática:

 (< xyz) 

Esto se puede considerar una aplicación de función ordinaria de la < función con tres argumentos. Ver 6.2.5 Operaciones Numéricas en la especificación.

Clojure también admite la comparación encadenada .

Creo que ICON es el lenguaje original para tener esto, y en ICON se cae de la manera en que los booleanos se manejan como tags especiales “fallidas” y todos los demás valores se tratan como verdaderos.

La comparación encadenada es una característica de BCPL, desde finales de los años sesenta.