1

以下是否为所有语言的标准以产生值 3?

Print(6 - 2 - 1)

换句话说,是否有任何语言会在“ 6 - 2 ”之前评估“ 2 - 1 ”?

我想做这个假设,这样我就可以本能地退出插入括号 ((6 - 2) - 1)。它让我面临 LISP 噩梦的风险。

谢谢

4

7 回答 7

5

在 Smalltalk 中,没有数学优先级。

数学运算符只是方法名称,因此优先级被视为任何其他方法名称。您的示例将按预期进行评估,但例如1 + 2 * 3yield9而不是7.

于 2009-12-15T21:15:09.717 回答
4

通常,当多个操作具有相同的优先级时,它们从左到右进行评估,类似于算术。我不想说所有语言,因为我还没有对所有语言进行过调查,但应该如此是有道理的。对于我要尝试的任何新语言,我仍然会仔细阅读文档。

于 2009-12-15T20:34:29.707 回答
3

只是为了提一个反例,如果内存服务 APL 是严格右关联的,因此 6-2-1 将评估为 5。我希望安装 APL 的人或其后裔之一会在我我错了。

问候

于 2009-12-16T10:17:17.197 回答
2

我所知道的每一种语言都会按照预期的顺序从左到右进行评估。但是,我建议您使用您正在使用的任何语言进行快速测试以验证这一点。

于 2009-12-15T20:33:01.677 回答
1

你想要的是从左到右的关联性(而不是从右到左的关联性)。

不能保证,但大多数语言都是从左到右与算术相关的。

于 2009-12-15T20:32:15.110 回答
1

据我所知,减法总是左结合的(原因很明显——它符合你的期望)。可能有些语言明确设计为不这样做,但可以肯定的是,算术几乎总是按您期望的方式工作。

于 2009-12-15T20:32:30.103 回答
1

停止担心并相信运营商的优先权。很少有语言具有与标准数学运算符不同的优先级。使用括号的地方是当优先级规则不明显时。使用标准数学运算符,这是显而易见的。

我所知道的唯一具有优先权但不遵循标准数学规则的语言家族是 APL 家族,尤其是 K 语言。这个家族有很多数学和发明的运算符,并且从右到左进行严格的评估。但除非您必须处理这些类型的语言,否则请不要担心。

于 2009-12-16T17:53:17.793 回答