【问题标题】:Why are interval comparisons (e.g: x < variable < y) not supported in most "mainstream" languages?为什么大多数“主流”语言不支持区间比较(例如:x < variable < y)?
【发布时间】:2012-07-13 10:04:10
【问题描述】:

这可能是一个非常简单的问题,或者之前可能已被问过,但在此处和通过谷歌进行简短搜索后,我无法真正找到答案。

因此,冒着错过类似情况的风险,这是我的问题。为什么通常不支持检查间隔的条件语句,而是作为块ifs 或使用&amp;&amp; 运算符将两个单独的条件绑定在一起?

承认,如果我不得不多写两行代码,这不是全世界,但我有数学背景,我发现现代编译器不能对这个相对简单的语句施以巫术,这真的很奇怪。

从技术或理论角度来看,是否有特殊原因?

【问题讨论】:

    标签: logic theory


    【解决方案1】:

    我想说从技术角度来看没有任何障碍,因为有些语言确实支持这种比较:

    • Python (docs)
    • Clojure (docs) - 以及几乎所有其他 lispy 语言
    • Perl 6 (docs)

    如果我没记错的话还有 Mathematica。

    可以肯定的是,它使语言的解析变得更加复杂,如果语言设计者不将其视为一项经常使用的功能,他们可能会也可能不会付出代价。

    ps。我个人喜欢它,但发现自己很少在 Python 中使用它。

    【讨论】:

    • 我不确定 Mathematica,但 MATLAB 支持它。我一直在使用不支持这种链接的 Java 和类似 Java 的语言。我想有趣的问题是关于解析的额外复杂性是什么/有多大,以及与其他复杂性相比修复该复杂性的代价有多大......
    • @posdef,肯定的。我能想到的唯一另一个原因是,在这种表达式中使用括号会以某种方式破坏语言的一致性:4 &gt; 3 &gt; 2 与@Vincenzo 指出的(4 &gt; 3) &gt; 2 不同。在 Python 中,第一个渲染True,第二个渲染False,这可能有点奇怪。
    【解决方案2】:

    我的两分钱在这里:如果你用多种语言写a &lt; b &lt; c,它意味着(考虑到比较运算符通常是关联的)((a &lt; b) &lt; c)。但是a &lt; b 返回一个布尔值,因此(例如,如果a &lt; b 返回true)连续减少是(true &lt; c),除了极少数情况外,这不是您想要做的。

    【讨论】:

    • 好的,这是一个很好的观点。但考虑到编译器现在似乎做了多少“魔术”,难道不能对这个相对较小的问题进行排序吗?
    猜你喜欢
    • 2011-05-04
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    相关资源
    最近更新 更多