我已经为LaTeX3写了一个十进制浮点数单元(纯粹的宏...很难)。特别是,我必须决定如何解析x < y < z
。我看到三个选项:3> 2> 1为真的语言
款待
<
为左结合二元运算符,所以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
等混合事件发生的细节感兴趣。如果它们存在,我也对其他选择感兴趣。
有趣。在我的情况下,我只有一种类型可用---浮点数(当目标是浮点数时,整数会自动转换为浮点数)---所以不会出现类型问题。我认为你的方法是在产生'1 < 3 > 2'的结果时产生一个'NaN',可能是在提高'invalid operation'标志后(参见IEEE 754 2008)? –
也许,如果你不想实现这种类型的静态检查,并且你也不想实现布尔逻辑值('True','False'和'NaN'的布尔对象;再次,只有在你不想实现一个合适的类型系统)。 – 2012-08-23 14:31:48
LaTeX是一种解释的宏语言。特别是,由于它没有被编译,AFAIK没有办法对这些比较关系进行静态检查。我认为,如果Python决定禁止'1 < 3 > 2',那么它也将不得不抛出异常。 –