Поддержка языков для операторов цепного сравнения (x <y <z)
A question был опубликован о цепных операторах сравнения и о том, как они интерпретируются на разных языках.
Операторы сравнения цепочек означают, что (x < y < z)
будет интерпретироваться как ((x < y) && (y < z))
вместо ((x < y) < z)
.
Комментарии по этому вопросу показывают, что Python, Perl 6 и Mathematica поддерживают цепочки сравнения операторов, но какие другие языки поддерживают эту функцию и почему она не является более распространенной?
Быстрый просмотр документации на Python показывает, что эта функция существует с по крайней мере с 1996 года. Есть ли причина, по которой другие языки не добавили этот синтаксис?
Статически типизированный язык будет иметь проблемы с преобразованием типов, но есть ли другие причины, по которым это не является более распространенным?
Ответы
Ответ 1
Это должно быть более распространенным явлением, но я подозреваю, что это происходит не потому, что язык синтаксического анализа делает более сложным.
Преимущества:
- Поддерживает принцип наименьшего удивления.
- Читает, как учит математика.
- Уменьшает когнитивную нагрузку (см. предыдущие 2 балла)
Недостатки:
- Грамматика более сложна для языка
- Специальный случай синтаксического сахара
Что касается причин, почему нет, мои догадки:
- Язык автора (ов) не думал об этом
- В списке "nice to have"
- Было решено, что это было недостаточно полезно, чтобы оправдать реализацию
Ответ 2
Выгода слишком мала, чтобы оправдать усложнение языка.
Вам это не нужно часто, и легко получить тот же эффект с помощью нескольких символов.
Ответ 3
Схема (и, возможно, большинство других семейств языков Lisp) поддерживает эффективное сравнение в пределах своей грамматики:
(< x y z)
Это можно рассматривать как обычное функциональное применение функции <
с тремя аргументами. См. 6.2.5 Численные операции в спецификации.
Clojure поддерживает скованное сравнение.
Ответ 4
Я думаю, что ICON - это оригинальный язык для этого, и в ICON он выпадает из того, что булевы обрабатываются как специальные теги "fail", при этом все другие значения обрабатываются как истинные.
Ответ 5
Сравнение цепей является особенностью BCPL, начиная с конца 1960-х годов.