Зачем поддерживать сравнение между различными типами данных на основе (казалось бы) произвольных правил? - PullRequest
3 голосов
/ 19 марта 2011

Мои вопросы: «Почему разработчик языка может разрешить сравнение между различными типами данных?». Кроме того, имеет ли это смысл в функциональном языке?

Например, в 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"> источник

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

1 Ответ

1 голос
/ 19 марта 2011

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

...