2009-12-15 85 views
1

是否在下列所有语言中标准化以产生值3?减法 - 评估顺序

Print(6 - 2 - 1) 

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

我想作出这个假设,以便我可以本能地插入圆括号((6 - 2) - 1)。它让我处于LISP噩梦的危险之中。

感谢

回答

4

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

+0

这对某些操作是正确的,但对其他操作不适用。例如。类似C语言的赋值运算符从右到左进行评估:“x = y = 3”被解析为“x =(y = 3)”,而不是“(x = y)= 3”。如果语言中有一个指数运算符,它通常也是正确的。 – 2009-12-18 16:02:56

1

你想要的是左到右联(而不是从右到左结合)是什么。

这并不是保证,但大多数语言是从算术到从左到右的联想。

1

据我所知,减法总是做成左结合的(出于显而易见的原因 - 它按照你的期望)。有些语言可能会被明确地设计为不适用,但这是一个安全的假设,算术几乎总是按照您期望的方式工作。

2

我知道的每种语言都会按照预期的顺序从左到右进行评估。不过,我建议你只要用你正在工作的任何语言进行快速测试来验证这一点。

5

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

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

3

只是为了提到一个反例,如果记忆服务APL是严格正确联合的,所以6-2-1会评估为5.我期望有人安装了APL或其一名后代将把如果我错了,我们是对的。

Regards

+0

我不能相信我在一年前的答案上发表评论,但你说得对,它会在APL方言中评估为5(用J验证)。 – 2010-12-15 19:37:14

1

不要担心和信任运营商的优先权。很少有语言的优先级与标准的数学运算符不同。使用圆括号的地方是不明显的优先规则是什么。对于标准的数学运算符,很明显。

我知道的唯一的语言家族有优先权,但不符合标准的数学规则是APL家族,特别是K语言。这个家庭拥有大量的数学和发明操作员,并严格从右到左进行评估。但除非你必须处理这些类型的语言,否则不要担心。