对链式比较运算符的语言支持(x< y< z)

时间:2010-11-03 19:26:39

标签: programming-languages syntax operators

发布了关于链式比较运算符以及如何用不同语言解释它们的question

链接比较运算符意味着(x < y < z)将被解释为((x < y) && (y < z))而不是((x < y) < z)

对该问题的评论表明,Python,Perl 6和Mathematica支持链接比较运算符,但其他语言支持此功能以及为什么它不常见?

快速浏览一下Python文档,可以看出这个功能至少从1996年开始。有没有更多语言没有添加这种语法的原因?

静态类型语言会出现类型转换问题,但还有其他原因这种情况不常见吗?

5 个答案:

答案 0 :(得分:12)

这种好处太小,无法证明使语言复杂化。

你不经常需要它,并且很容易用更多的字符干净地获得相同的效果。

答案 1 :(得分:9)

它应该更常见,但我怀疑它不是因为它使解析语言更复杂。

优点:

  • 坚持最少惊喜的原则
  • 读数学就像
  • 降低认知负荷(见前2点)

缺点:

  • 语法对语言来说更复杂
  • 特殊情况句法糖

至于为什么不,我的猜测是:

  • 语言作者没有想到它
  • 是'很高兴'列表
  • 确定没有足够的理由来实施

答案 2 :(得分:3)

Scheme(以及可能大多数其他Lisp系列语言)在其语法中有效地支持多重比较:

(< x y z)

这可以被认为是具有三个参数的<函数的普通函数应用程序。请参阅规范中的6.2.5 Numerical Operations

Clojure也支持chained comparison

答案 3 :(得分:2)

自20世纪60年代后期以来,链式比较是BCPL的一个特征。

答案 4 :(得分:1)

我认为ICON是拥有此功能的原始语言,而在ICON中,它不会将布尔值作为特殊的“失败”标记处理,并将所有其他值视为真。