我的問題是,「爲什麼語言設計者考慮允許不同數據類型之間的比較?」。另外,這在功能語言中更有意義嗎?爲什麼支持基於(看似)任意規則的不同數據類型之間的比較?
例如,在二郎一個可以執行以下比較:
%% 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
在蟒蛇2.x的還有,
p = lambda x,y: x+y
p > (1)
True
p < (1)
False
p == (1)
False
雖然看起來像Python社區決定,這不是一個好主意畢竟:
不同類型的物體總是 比較不等,並且被訂購 一貫,但任意。 [...] 這種不尋常的比較定義 被用來簡化 操作的定義,例如排序以及in和 不在運營商中。 source
從Python 3發佈說明:
排序比較操作符(<, < =,> =,>)引發TypeError異常 當操作數沒有 有意義的自然排序。因此,表達式如1 <'',0>無或 len < = len不再有效,而 無<沒有引發TypeError 而不是返回False。 A 推論是排序一個 異構列表不再使 有意義 - 所有元素必須是 相互比較。 source
這種解釋爲什麼,但如果有其他的原因,讓這一點,特別是在函數式語言我想知道。