Подтвердить что ты не робот

Поддержка языков для операторов цепного сравнения (x <y <z)

A question был опубликован о цепных операторах сравнения и о том, как они интерпретируются на разных языках.

Операторы сравнения цепочек означают, что (x < y < z) будет интерпретироваться как ((x < y) && (y < z)) вместо ((x < y) < z).

Комментарии по этому вопросу показывают, что Python, Perl 6 и Mathematica поддерживают цепочки сравнения операторов, но какие другие языки поддерживают эту функцию и почему она не является более распространенной?

Быстрый просмотр документации на Python показывает, что эта функция существует с по крайней мере с 1996 года. Есть ли причина, по которой другие языки не добавили этот синтаксис?

Статически типизированный язык будет иметь проблемы с преобразованием типов, но есть ли другие причины, по которым это не является более распространенным?

4b9b3361

Ответ 1

Это должно быть более распространенным явлением, но я подозреваю, что это происходит не потому, что язык синтаксического анализа делает более сложным.

Преимущества:

  • Поддерживает принцип наименьшего удивления.
  • Читает, как учит математика.
  • Уменьшает когнитивную нагрузку (см. предыдущие 2 балла)

Недостатки:

  • Грамматика более сложна для языка
  • Специальный случай синтаксического сахара

Что касается причин, почему нет, мои догадки:

  • Язык автора (ов) не думал об этом
  • В списке "nice to have"
  • Было решено, что это было недостаточно полезно, чтобы оправдать реализацию

Ответ 2

Выгода слишком мала, чтобы оправдать усложнение языка.

Вам это не нужно часто, и легко получить тот же эффект с помощью нескольких символов.

Ответ 3

Схема (и, возможно, большинство других семейств языков Lisp) поддерживает эффективное сравнение в пределах своей грамматики:

(< x y z)

Это можно рассматривать как обычное функциональное применение функции < с тремя аргументами. См. 6.2.5 Численные операции в спецификации.

Clojure поддерживает скованное сравнение.

Ответ 4

Я думаю, что ICON - это оригинальный язык для этого, и в ICON он выпадает из того, что булевы обрабатываются как специальные теги "fail", при этом все другие значения обрабатываются как истинные.

Ответ 5

Сравнение цепей является особенностью BCPL, начиная с конца 1960-х годов.