Сравнение

Сравнение — булево выражение для выяснения отношения между двумя термами: равны ли они или один больше другого. То же: comparison.

Выражение сравнения всегда возвращает true или false — в зависимости от успешности нашей гипотезы. Если выражение A > B возвращает true, значит, наша гипотеза сработала, то есть A действительно больше B. В противном случае будет false.

В Эрланге можно сравнивать между собой любые термы. Результат не будет случайным, он всегда предопределён принципами.

1> 8 < vosem. 
true
2> 1 > [a, b, {"цэ", "дэ"}].
false
3> fun() -> 777 end < <<777>>.
true

Если сравниваются числа, то сравниваются, конечно, позиции на числовой оси. Если сравниваются между собой списки, то сравнение происходит поэлементно.

1> "осёл" > "осел". 
true
2> like > lake. 
true

Атомы, как мы видим, тоже анализируются. Они превращаются в исходный текст и сравниваются посимвольно.

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

number < atom < reference < fun < port < pid < tuple < map
    < nil < list < bit string

Когда сравниваются между собой кортежи, то преимущество получает тот, у кого больше элементов. В противном случае будет поэлементное сравнение.

1> {k,l} < {a,b,c}. 
true
2> {a,b,d} > {a,b,c}.
true

Битовые строки сравниваются побитно. Если окажется, что одна битовая строка является префиксом другой (и не хватит битов для сравнения), то более длинная окажется больше.

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

С помощью выражения сравнения всегда сравниваются только два терма (или, если угодно, два выражения, которые их производят):

Expr1 op Expr2

Всего есть восемь операторов сравнения.

== проверяет на равенство. 1 будет равен 1.0.

=:= проверяет на строгое равенство (и типы должны быть одинаковыми). 1 не будет равен 1.0.

/= проверяет на неравенство.

=/= проверяет на строгое неравенство.

=< меньше или равно.

>= больше или равно.

< меньше.

> больше.

Сравнение можно использовать в обработчике списка в качестве фильтра.

Документация

Сравнение термов — официальная информация.


© Алексей Карманов, 2024.