Интересно, есть ли какая - либо причина - или , если это не просто случайность истории - то есть нет !>
и !<
операторов в большинстве языков программирования?
a >= b
(большее ИЛИ равно b) может быть записано как !(a < b)
(НЕ Меньше b) , что равно a !< b
.
Этот вопрос поразил меня, когда я занимался кодированием своего собственного конструктора деревьев выражений. Большинство языков программирования имеют a != b
оператор для !(a=b)
, так почему нет !>
и !<
?
ОБНОВИТЬ:
!<
(не меньше) легче произнести, чем>=
(больше или равно)!<
(не менее) является короче , чтобы ввести , чем>=
(больше или равно)!<
(не меньше) легче понять * чем>=
(больше или равно)
* потому что OR
это бинарный оператор, ваш мозг должен оперировать двумя операндами (терка, равно), а NOT
унарный оператор и ваш мозг должен оперировать только одним операндом (меньшим).
syntax
comparison
operators
Алекс Бурцев
источник
источник
Ответы:
Язык программирования D и расширение DMC до C и C ++ действительно поддерживают эти операторы (все 14 их комбинаций), но, что интересно, D собирается отказаться от этих операторов , главным образом потому, что
a !< b
? Этоa>=b || isNaN(a) || isNaN(b)
.!<
это не то же самое>=
, потому чтоNaN !< NaN
верно, аNaN >= NaN
ложно. IEEE 754 трудно освоить, поэтому использованиеa !< b
to просто вызовет путаницу при обработке NaN - вы можете искать такие операторы в Фобосе (стандартная библиотека D), и у многих пользователей есть комментарии, чтобы напомнить читателям, что NaN вовлечен,!(a < b)
, или, если кому-то нравится быть явнымa >= b || isNaN(a) || isNaN(b)
, и их легче читать.Кроме того, отношения (≮, ≯, ≰, ≱) редко встречаются в базовой математике, в отличие от
!=
(≠) или>=
(≥), поэтому многим людям трудно это понять.Это, вероятно, также причины, почему большинство языков не поддерживают их.
источник
seldomly seen in basic math
- Больше похоже, никогда не видел. В алгебре мы учимся просто переворачивать ее на математически эквивалентную (тем более,NaN
что в базовой математике она не фигурирует)double
исключая ихNaN
поведение. Во многих случаях код, который может выполнить любое сравнениеNaN
, захочет иметьNaN
сравнение больше, чем все, сделать сравнение меньше, чем все, или выдать исключение при попытке сравнения. Разрешение декларативному указанию кода того, как егоNaN
следует рассматривать, уменьшит необходимость использовать императивный код для достижения правильного поведения.<fenv.h>
такие функции, какfesetexceptflag
.Потому что не имеет большого смысла иметь два разных оператора с одинаковым значением.
!>
) точно так же, как «меньше или равно» (<=
)!<
) точно так же, как «больше или равно» (>=
)Это не относится к «не равно» (
!=
), нет оператора с таким же значением.Таким образом, ваша модификация сделает язык более сложным без какой-либо выгоды.
источник
x = x + 1
,x += 1
иx++
?<>
является оператором с таким же значением, как!=
и Python 2 имеет оба.<>
устаревшим в течение длительного времени , и он удален , так как 3.0 (и заметьте, последний релиз 2.x когда - либо , 2,7, был выпущен летом 2010 года).!<
является синонимом>=
. Позже это просто способ печатать четко определенный математический символ≥
. Вы правы в том, что «не меньше чем» используется в разговорной речи, однако оно является разговорным и может быть неоднозначным (может быть истолковано≥
или неверно истолковано как>
). С другой стороны, в программировании и математике используется четко определенная, однозначная терминология.Даже в 3-значной логике, такой как ANSI SQL,
not x < y
эквивалентноx >= y
, поскольку они оба дают,NULL
если либо,x
либоy
естьNULL
. Однако есть не-ANSI-совместимые диалекты SQL, где они не эквивалентны, и они есть!<
.источник
NaN
ложным, так что!(2 < NaN) == true
пока(2 >= NaN) == false
.NaN
s. Все они перестают вести себя нормально.a !< b = not (a < b)
, мы можем просто сказать (! <) = (> =).Transact-SQL имеет операторы !> (Не более) и ! <(Не менее) .
Так что, кроме вас, кто-то из
SybaseMicrosoft также думал, что это будет хорошая идея. Так же, как Microsoft Боб! :)источник
Я думаю, что ответ просто, что нет необходимости в
!<
операторе. Как вы указали в своем вопросе, уже>=
и<=
наряду с возможностью отрицать существующее выражение, так зачем добавлять еще один оператор?источник
!<
не короче набирать, чем>=
, или я что-то упустил?Из RFC 1925
Добавление дополнительных операторов, которые дублируют существующую функциональность, не делает ничего, кроме добавления (ненужной) сложности к языку (и, следовательно, токенизатора и анализатора).
Также учтите, что в языках, где возможна перегрузка операторов, вам потребуется перегрузить еще одного оператора. Примите во внимание путаницу, когда
bool operator<=
иbool operator!>
могли бы вернуться разные вещи (да, я знаю, что можно уже сделать противоречивые сравнения).Наконец, подумайте о языках, где методы или операторы определены множественно (Ruby - я смотрю на вас ), и у вас есть один программист, который использует <=, а другой использует!>, И у вас есть несколько стилей кода для одного и того же выражения.
источник
! <равно> = Теперь почему у нас второй, а не первый, потому что все языки реализуют сначала положительный оператор, а затем приближаются к отрицательному оператору, так как реализация> = также охватывает! <и <= охватывает!>. Таким образом, создатель языка переходит к этим и думал, что они будут лишними и пропустить их.
Всегда старайтесь сначала реализовать позитивный случай, затем переходите к негативному (:) позитивное мышление, только мое личное мнение)
источник
Причина в том, что операторы в языках программирования заимствуют из математической традиции, а в математике никто на самом деле не использует «не больше» и «не меньше», так как «меньше или равно» и «больше или равно» делают такую же работу.
Таким образом, в языках программирования мы обычно получаем символ, похожий на ≠ для не равных (
!=
или/=
, если кто-то не увлекается<>
или текстовым оператором)и вещи, которые похожи на ≤ и ≥ (
<=
и>=
)Кстати, я не согласен с твоим утверждением, что НЕ проще понять и рассуждать о том, что ИЛИ. В математике доказательства, включающие множество отрицаний (например, приведение к абсурду), обычно осуждаются, если есть более прямая альтернатива. Кроме того, в случае упорядочивания базовые знания, которыми мы располагаем (и которые используются при обдумывании или доказательстве чего-либо), - это трикотомия между <, = и>, поэтому любое утверждение! <, Вероятно, следует преобразовать в> =, если вы хотите это сделать. что-нибудь полезное с этим.
источник
Я бы частично обвинил набор инструкций по сборке. У вас есть инструкции, такие как
jge
«прыгать, если больше или равно». В отличие от «прыгать, если не меньше, чем».Авторы компиляторов, возможно, ушли от того, что придумали авторы ассемблера, что, по-видимому, основывалось на том, как он был помечен при разработке на чипе.
... возможно.
источник
Я думаю, что видел несколько языков несколько лет назад, где вместо
!=
оператора (не равно) использовалось что-то вроде<>
. Не могу вспомнить их имена, хотя ...Я думаю, что это труднее читать
!(a < b)
илиa !< b
чемa >= b
. Вероятно, поэтому!<
не используется (на мой взгляд, это выглядит ужасно).источник
<>
используется (был?) главным образом на диалектах BASIC, SQL и Pascal.<>
, хотя он был удален в 3.!=
он более общий, чем<>
, поскольку у вас могут быть вещи (например, комплексные числа), в которых равенство четко определено, но в действительности нет полезного порядка.