问题标签 [associativity]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
134 浏览

php - 了解 PHP 的左结合三元运算符

是否有记录的解释/原因为什么PHP' 的三元运算符? :是左关联而不是右关联。肯定存在将运算符与所有其他命令式语言区分开来的原因吗?

0 投票
1 回答
2421 浏览

c - 将中缀转换为后缀表达式,关联性总是从左到右吗?

如果是,那么为什么会这样?右结合性对后缀表达式无效吗?

0 投票
0 回答
80 浏览

c++ - 运算符关联性和求值顺序

我从这里和那里、从 stackoverflow 和其他网站读到,表达式评估取决于运算符的优先级和运算符的关联性。问题是我从某个著名网站上读过这句话:优先级和关联性独立于评估顺序。好的,但是我在一个教育网站上读过这一行:表达式的数据类型和值取决于操作数的数据类型和运算符的求值顺序,这由运算符的优先级和关联性决定。

好吧,我很困惑。我知道编译器可以出于优化目的以不同的顺序评估具有相同优先级的运算符,我认为,因此行为未定义评估发生的顺序。这意味着它可以改变整个表达式,如果没有任何副作用,或者只有一个副作用,结果将是相同的。还是我错了?如果我是对的,那么如果大多数情况下评估顺序未定义,那么为什么他们定义运算符的关联性,除了在赋值链、逻辑短路运算符和我认为的其他一些情况下。

简而言之:评估顺序是否取决于关联性。如果是的话,你能解释一下吗?如果它不依赖于关联性,那么他们为什么首先定义关联性,它只是用于解析阶段,而不是用于评估阶段?我看到关联性有用的唯一地方是三元运算符。为什么关联性不适用于运算符重载,例如对于我们得到未定义行为的 cout 中的 operator<<,因为函数参数的评估顺序是未定义的?

0 投票
2 回答
384 浏览

c++ - 在这种情况下,从左到右的关联性是什么意思?

我正在阅读 C++ Primer 中关于 C++ 中的 << 运算符的信息。
其中,有几行关于 << 运算符

cout << "Some string" 计算为左手 ostream 运算符,即表达式的结果是 cout 对象本身。(我们说运算符从左到右关联)。

如果有人解释上述行的含义,那就太好了。

0 投票
3 回答
145 浏览

haskell - 单子结合律中的未绑定变量

使用ghci我计算过:

上面的单子表达式似乎不对应于单子结合律的任何一边:

我想知道如何将单子关联性应用于表达式:

因为return (x,y)对周围的函数和包含它的函数都关闭,所以似乎存在于结合律左侧的中间单子(m >>= f)在此示例中不存在。

0 投票
3 回答
702 浏览

c - 如果从左到右和从右到左 - 运算符的关联性都存在于语句中,那么将考虑什么?

b的值是多少?这里 =,+ 的结合性是从左到右,*,前缀增量 (++) 的结合性是从右到左。

那么对于 int b=a*i + ++i; 我应该考虑什么评估顺序?

左到右?右到左?为什么?

0 投票
1 回答
109 浏览

z3 - Z3 是否具有促进关联/交换运算符链中子公式匹配的功能?

假设我有一个用户定义的交换和关联运算符 op。下面的代码无效,因为我使用的 op 具有两个以上的参数。让我们暂时假设它是有效的,并且它意味着“应用 op 的方式是无关紧要的”。

确保假设 1 用 x, y := b, d 实例化并且假设 2 适用于证明猜想的最佳方法是什么?

我正在考虑的一种解决方案是生成所有可能对应于 (op abcd) 的二叉树。然而,这是相当昂贵的:有 5 种不同的二叉树,有 4 片叶子和 24 种不同的叶子排列,总共 120 棵不同的二叉树。我也可以忍住并希望 z3 自己使用关联性和交换性并触发假设 1 的正确实例化。

如果我们考虑到像 (op abc) 这样的链可以出现在全称量化中,问题就变得更加棘手。我们可能可以使用模式 (op a (op bc))、(op b (op ac)) 等来最大化量化被实例化的机会,但模式必须出现在某个地方,而 z3 可能没有指导让它自己出现。

有什么更好的我可以做的吗?

谢谢!西蒙

0 投票
2 回答
501 浏览

haskell - 为什么是美元!运算符右结合?

我只是在学习 Haskell,但我仍然不完全清楚何时以及如何强制执行严格的评估

当我想要一个函数严格评估其参数时,我发现自己在写

这看起来很奇怪。不应该$!是左联想的,所以我可以写

让它做我想做的事吗?

我完全误解了$!操作员?

0 投票
1 回答
118 浏览

c++ - |、~ 和 & 运算符的运算符优先级?

我对这些逻辑运算符感到困惑。有人可以解释这些运算符的优先级和关联规则吗?在逐位运算中,d 中的 a=011、b=010 和 c=001 是否应该首先否定 a 还是应该从右到左开始评估并且谁的优先级更高?输出为 4, 3,3。

0 投票
2 回答
5484 浏览

python - Python比较运算符从左到右链接/分组?

运算符优先级的 Python 文档指出:

同一框中的运算符从左到右分组(比较除外,包括测试,它们都具有相同的优先级和从左到右的链 - 请参阅比较...部分)

这是什么意思?具体来说:

  1. “同一框中的运算符从左到右分组(比较除外......)” - 比较不是从左到右分组吗?

  2. 如果比较没有从左到右分组,他们会做什么呢?他们是“连锁”而不是“群体”吗?

  3. 如果比较“链”而不是“组”,“链”和“分组”有什么区别?

  4. 有什么例子可以证明比较运算符从左到右而不是从右到左链接?