2014-01-07 2 views
3

Извините за такой базовый вопрос, но я не могу понять это: если я использую обычные операторы сравнения реляций с терминами - как это работает?Как работает оператор сравнения Erlang?

Например:

"AAA" > "aaa" => false - Почему "AAA" меньше "aaa"?

Если у меня есть два атома:

atom1 < atom2 => true - почему atom1 меньше atom2?

Как и когда я использую операторы сравнения с атомами?

ответ

8
  1. A имеет код ASCII 65, a имеет код ASCII 97, таким образом "A" < "a".
  2. Процитировать изобретателя: «Фактический порядок не важен, но важно то, что общий порядок очень важен». Это связано с тем, что вы хотите, чтобы все условия были сопоставимы, поскольку только в этом случае вы можете сортировать их (что часто используется).

Точные правила приведены в http://www.erlang.org/doc/reference_manual/expressions.html#id77480:

7.11 Срочные Сравнения

Следующий порядок определяется:

номер < атом < ссылка < весело < порт < PID < tuple < Список < bit-string

Списки сравниваются по элементам. Кортежи упорядочены по размеру, два кортежа с одинаковым размером сравниваются по элементам.

+0

Спасибо за ответ! – user3169252

+0

Чтобы сравнить два атома, он выполняет прямое лексическое сравнение символов в атомах, и если символы одинаковы, то более длинный атом больше. Итак, 'cat> car => true' и' cat < cats => true'. – rvirding

+0

Это правда, однако, я не мог найти информацию о том, имеет ли это * *. – filmor

Смежные вопросы