3>的语言2> 1是真的

时间:2012-08-23 12:59:50

标签: language-agnostic comparison

我为LaTeX3编写了一个十进制浮点单元(纯宏......很难)。特别是,我必须决定如何解析x < y < z。我看到三个选项:

  • <视为左关联二元运算符,因此x < y < z等同于(x < y) < z。这是C的作用:-1 < 0 < 1变为(-1 < 0) < 1,因此1 < 1变为0

  • <视为右关联二元运算符,因此x<y<z等同于x < (y < z)。我觉得这个选择没有优势。

  • 遇到<时,请提前了解更多比较运算符,并将x < y < z视为等同于(x < y) && (y < z),其中y只会被评估一次。这是大多数非程序员所期望的。很多LaTeX用户都是非程序员。

目前我正在使用第一个选项,但这似乎不太自然。我认为我可以实施第二种情况而不会产生太多开销。我应该吗?

由于这个问题是主观的,让我问一个客观的问题:主流语言选择选项3?我对a < b > c == d < e != f等混合事物的细节很感兴趣。如果它们存在,我也会对其他选择感兴趣。

3 个答案:

答案 0 :(得分:3)

简答:如果比较序列“指向同一方向”,并且不使用!=时,则只能解析比较序列。

长答案:在Python中,3 > 2 > 1的评估结果为True。但是,我不得不说所使用的实现过于简单化,因为它允许使用像a < b > c == d < e != f这样的表达式,这在我看来是荒谬的。表达式would be interpreted as (a < b) and (b > c) and (c == d) and (d < e) and (e != f)。这是一个简单的规则,但因为它允许令人惊讶的结果,我不喜欢这种解释。

我提出了一个更可预测的选择:

  • 考虑一个命题xAyBzCw。如果这个命题是“敏感的”,则相当于xAy and yBz and zCw。对于“敏感性”,有必要......

    • 值(xyzw)是同一组X的一部分(或者它们的类型可以统一为),和
    • A上的关系(BCX)为transitive binary relations
    • 对于每对有序的关系AB,存在关系CxAy and yBz暗示所有xCz x },yz;这种关系也受到这些限制。

关于最后一条规则,您希望能够说1 < 2 = a < 4等同于1<2 and 2=a and a<4,还有1<2 and 1<a and 1<4。要说后者,您必须知道=<的互动方式。

您不能在我的选项中使用!=,因为它不具有传递性。但您也不能说1 < 3 > 22 < 3 > 11 < 3 > 1,除非您的关系?1?22?11?1(基本上,这将是一种关系允许任何一对)。

从句法角度来看:您希望将关系运算符视为特殊运算符(+更像是一个函数运算符),类似于您的第三个选项。

答案 1 :(得分:2)

Python链接关系运算符。当您点击inis时,这会变得很有趣,因为它们也被认为是关系型的。

>>> 1 < 2 in [True, False]
False
>>> 1 < 2 in [2, 4]
True

答案 2 :(得分:2)

J从右到左评估语句,以便:

3 > 2 > 1

成为第一个

2 > 1

哪个解析为true,表示为1,因此:

3 > 1

其中也解析为true,因此1.相反的运算符<将导致false,而整个语句恰好为true。所以你没有进一步与J。

您的主要问题是您的初始陈述:

3 > 2 > 1

的人类简写
(3 > 2) AND (2 > 1)

因此,虽然提前读书看起来很蹩脚,但它确实是代表性所需要的。当然,除非其他人已经说过,否则会有一些Python魔法。