问题标签 [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 投票
1 回答
548 浏览

haskell - Haskell 中的 Monad 关联规则

(m >>= f) >>= g = m >>= (\x -> f x >>= g)

f和有什么不同\x->f x??

我认为它们是同一类型a -> m b。但似乎>>=等式右侧的第二个将类型\x->f x视为 as m b。怎么了?

0 投票
3 回答
125 浏览

c - C中的关联性和序列点

由于 '?' 的结合性 是从右到左,任意 2 个连续的“?” 运营商必须这样对待,对吧?

现在,

我希望这将被执行为:

现在由于它是从右到左执行的,当遇到第一个'?' 在语句中,x 的值为 0,表达式为

因此我希望 y 为 1,但它在我的 dev-cpp 上显示为零。我错在哪里?

0 投票
2 回答
464 浏览

haskell - 自动和确定性地测试一个函数的关联性、交换性等

是否可以构造一个高阶函数isAssociative,它接受另一个有两个参数的函数并确定该函数是否是关联的?

类似的问题,但也适用于其他属性,例如交换性。

如果这是不可能的,有没有办法用任何语言自动化它?如果有我感兴趣的 Agda、Coq 或 Prolog 解决方案。

我可以设想一个蛮力解决方案,它检查每个可能的参数组合并且永不终止。但是在这种情况下,“永不终止”是一个不受欢迎的属性。

0 投票
2 回答
268 浏览

c - 运算符的 C99 关联性 - 它在哪里指定?

在 C99 标准中,表达式允许优先级和关联性。

由于运算符在文档中出现的顺序是递减优先级,因此优先级得到了很好的记录,因此函数调用位于乘法运算符之前,而乘法运算符又位于加法运算符之前。

但是,我找不到对关联性的明确描述,无论是左还是右。这很重要,因为35/5*214适用于一个变体(35/5)*23另一个变体35/(5*2)

部分6.5 Expressions /3, footnote 74状态:

语法规定了表达式求值中运算符的优先级,与本小节主要小节的顺序相同,最高优先级在前。

在每个主要子条款中,运算符具有相同的优先级。左或右结合性在每个子条款中由其中讨论的表达式的语法指示。

但是,以乘法为例:

6.5.5 乘法运算符
  语法
    multiplicative-expression:
      cast-expression
      multiplicative-expression * cast-expression
      multiplicative-expression / cast-expression
      multiplicative-expression % cast-expression

  约束

每个操作数都应具有算术类型。运算符的操作数%应为整数类型。

  语义

通常的算术转换是在操作数上执行的。

二元*运算符的结果是操作数的乘积。

运算符的结果/是第一个操作数除以第二个的商;运算符的结果%是余数。在这两种操作中,如果第二个操作数的值为零,则行为未定义。

当整数被除法时,/运算符的结果是代数商,其中任何小数部分被丢弃。如果商a/b是可表示的,表达式(a/b)*b + a%b应该等于a

我在那里看不到任何提到关联性的东西,标准中的其他地方似乎也没有任何默认设置。

我在这里错过了什么吗?

0 投票
3 回答
12912 浏览

sql - 在 SQL 中,使用括号和 OR 是什么意思?

例子:

示例 2:

在具有真实列名的数据库中,我得到两个不同的结果。带括号的那个是正确的,因为如果我这样做:

进而

并将它们加在一起,我得到了正确的答案......我想。与上面括号的第一个示例相同。

为什么我通过改变 OR 测试的优先级得到不同的结果?

0 投票
2 回答
223 浏览

c - 为什么 C 中的运算符之间存在不同的关联性?

谈到 C 中运算符的关联性,我想知道为什么具有相同优先级的运算符之间存在不同的关联性。例如,后缀自增和后缀自减有左结合性;而前缀递增和前缀递减具有正确的关联性。对所有相同的优先级运算符仅具有左或右关联性不是很简单吗?

这背后有什么原因吗?

0 投票
5 回答
14251 浏览

c++ - 浮点加法和乘法是否关联?

当我添加三个浮点值并将它们与 1 进行比较时,我遇到了问题。

为什么这些值会不同?

0 投票
4 回答
651 浏览

c# - 为什么在这种情况下将整数转换为字符串?

下面发生了什么?

i在这两种情况下都被转换为字符串。我对运算符优先级的概念(尽管这个例子没有显示太多)和评估方向感到困惑。有时评估是从左到右进行的,反之亦然。我不完全了解如何评估表达式的科学......

为什么i在上面的例子中被转换为字符串,而实际上并没有给出编译错误?

0 投票
8 回答
2940 浏览

java - java中(--i + ++i)中表达式的输出

执行时输出:17
i 的最终值为:9

但是根据java中的关联性和优先级规则,应该首先执行++i,即从右到左给出10,然后--i给出9..将两者相加,答案应该是19......至于我知道这样的代码在 C/C++ 中给出了未定义的行为,但在 java 中,规则是严格定义的,并且没有序列点的概念。那么,任何人都可以澄清这个问题,因为我真的对此感到困惑吗?同样在一些书中提到,后递增和后递减运算符是 LTR 关联的。但是在其他一些书中,它给出的所有增量和减量(post 和 pre)都是 RTL 关联的..!! 任何人都可以为 java 提供正确的运算符优先级和关联性表吗?

0 投票
2 回答
2224 浏览

c++ - C++:输入和输出流运算符:关联性

理论上的输入/输出流操作符关联性:

左到右

(例如,据此:Sait Mary's University website

实践中的输入/输出流运算符关联性:

输出(MSVCPP 2010、2012):

此示例演示以从右到左的顺序调用函数(尽管它们的值按预期的从左到右打印)。

问题: 此代码示例如何与关于 LEFT TO RIGHT 执行的标准词相关联?为什么函数执行按从右到左的顺序执行?