2011-03-19 22 views
3

我的問題是,「爲什麼語言設計者考慮允許不同數據類型之間的比較?」。另外,這在功能語言中更有意義嗎?爲什麼支持基於(看似)任意規則的不同數據類型之間的比較?

例如,在二郎一個可以執行以下比較:

%% 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

這種解釋爲什麼,但如果有其他的原因,讓這一點,特別是在函數式語言我想知道。

回答

1

在動態語言中,它具有一定的意義,因爲它能很好地對異類列表進行排序並構建異構樹。我想我會說,功能語言不太可能,因爲它是強類型語言,原因很明顯。

相關問題