为什么支持基于(看似)任意规则的不同数据类型之间的比较?

时间:2011-03-19 05:28:25

标签: language-agnostic syntax language-design

我的问题是,“为什么语言设计师会考虑允许在不同数据类型之间进行比较?”。另外,这在功能语言中更有意义吗?

例如,在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社区认为这毕竟不是一个好主意:

  始终是

不同类型的对象   比较不平等,并订购   一贯但任意。   [...]   这种不寻常的比较定义   用来简化定义   排序和in和等操作   不在运营商。   source

从Python 3发行说明:

  

订购比较运算符(&lt;,   &lt; =,&gt; =,&gt;)引发TypeError异常   当操作数没有时   有意义的自然顺序从而,   表达式如1&lt; '',0&gt;无或   len&lt; = len不再有效,并且   例如无&lt;无引发TypeError   而不是返回False。一个   推论是排序一个   异构列表不再制作   感觉 - 所有元素都必须   相互比较。   source

这种解释原因,但我想知道是否有其他理由允许这一点,特别是在函数式语言中。

1 个答案:

答案 0 :(得分:1)

在动态语言中,它具有一定的意义,因为能够对异构列表进行排序并构建异构树是很好的。而且我想我会说它不是那么多功能性语言,因为它是强类型语言,这是显而易见的原因。