Мои вопросы: «Почему разработчик языка может разрешить сравнение между различными типами данных?». Кроме того, имеет ли это смысл в функциональном языке?
Например, в erlang можно выполнить следующие сравнения:
%% Tuples are greater than numbers
999999 < {1,2}.
true
%% Lists are greater than tuples
{90000} < [1].
true
%% Atoms are greater than numbers
1 < false.
true
В Python 2.x также
p = lambda x,y: x+y
p > (1)
True
p < (1)
False
p == (1)
False
Хотя похоже, что сообщество питонов решило, что это не очень хорошая идея:
объекты разных типов всегда
сравнивать неравное и упорядоченное
последовательно, но произвольно.
[...]
Это необычное определение сравнения
был использован для упрощения определения
операции, такие как сортировка и в и
не в операторах.
источник
Из примечания к выпуску Python 3:
Операторы сравнения порядка (<,
<=,> =,>) вызвать исключение TypeError
когда операнды не имеют
значимый естественный порядок. Таким образом,
выражения типа 1 <'', 0> нет или
len <= len больше не действительны, и
например None <None вызывает TypeError
вместо возвращения Ложь.
Следствием является то, что сортировка
гетерогенный список больше не делает
смысл - все элементы должны быть
сопоставимы друг с другом.
<a href="http://docs.python.org/release/3.0.1/whatsnew/3.0.html" rel="nofollow"> источник
Этот тип объясняет почему, но мне было интересно, есть ли другие причины, позволяющие это сделать, особенно на функциональных языках.