问题标签 [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.
haskell - Haskell 中的 Monad 关联规则
(m >>= f) >>= g
= m >>= (\x -> f x >>= g)
f
和有什么不同\x->f x
??
我认为它们是同一类型a -> m b
。但似乎>>=
等式右侧的第二个将类型\x->f x
视为 as m b
。怎么了?
c - C中的关联性和序列点
由于 '?' 的结合性 是从右到左,任意 2 个连续的“?” 运营商必须这样对待,对吧?
现在,
我希望这将被执行为:
现在由于它是从右到左执行的,当遇到第一个'?' 在语句中,x 的值为 0,表达式为
因此我希望 y 为 1,但它在我的 dev-cpp 上显示为零。我错在哪里?
haskell - 自动和确定性地测试一个函数的关联性、交换性等
是否可以构造一个高阶函数isAssociative
,它接受另一个有两个参数的函数并确定该函数是否是关联的?
类似的问题,但也适用于其他属性,例如交换性。
如果这是不可能的,有没有办法用任何语言自动化它?如果有我感兴趣的 Agda、Coq 或 Prolog 解决方案。
我可以设想一个蛮力解决方案,它检查每个可能的参数组合并且永不终止。但是在这种情况下,“永不终止”是一个不受欢迎的属性。
c - 运算符的 C99 关联性 - 它在哪里指定?
在 C99 标准中,表达式允许优先级和关联性。
由于运算符在文档中出现的顺序是递减优先级,因此优先级得到了很好的记录,因此函数调用位于乘法运算符之前,而乘法运算符又位于加法运算符之前。
但是,我找不到对关联性的明确描述,无论是左还是右。这很重要,因为35/5*2
它14
适用于一个变体(35/5)*2
和3
另一个变体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
。
我在那里看不到任何提到关联性的东西,标准中的其他地方似乎也没有任何默认设置。
我在这里错过了什么吗?
sql - 在 SQL 中,使用括号和 OR 是什么意思?
例子:
示例 2:
在具有真实列名的数据库中,我得到两个不同的结果。带括号的那个是正确的,因为如果我这样做:
进而
并将它们加在一起,我得到了正确的答案......我想。与上面括号的第一个示例相同。
为什么我通过改变 OR 测试的优先级得到不同的结果?
c - 为什么 C 中的运算符之间存在不同的关联性?
谈到 C 中运算符的关联性,我想知道为什么具有相同优先级的运算符之间存在不同的关联性。例如,后缀自增和后缀自减有左结合性;而前缀递增和前缀递减具有正确的关联性。对所有相同的优先级运算符仅具有左或右关联性不是很简单吗?
这背后有什么原因吗?
c++ - 浮点加法和乘法是否关联?
当我添加三个浮点值并将它们与 1 进行比较时,我遇到了问题。
为什么这些值会不同?
c# - 为什么在这种情况下将整数转换为字符串?
下面发生了什么?
i
在这两种情况下都被转换为字符串。我对运算符优先级的概念(尽管这个例子没有显示太多)和评估方向感到困惑。有时评估是从左到右进行的,反之亦然。我不完全了解如何评估表达式的科学......
为什么i
在上面的例子中被转换为字符串,而实际上并没有给出编译错误?
java - java中(--i + ++i)中表达式的输出
执行时输出:17
i 的最终值为:9
但是根据java中的关联性和优先级规则,应该首先执行++i,即从右到左给出10,然后--i给出9..将两者相加,答案应该是19......至于我知道这样的代码在 C/C++ 中给出了未定义的行为,但在 java 中,规则是严格定义的,并且没有序列点的概念。那么,任何人都可以澄清这个问题,因为我真的对此感到困惑吗?同样在一些书中提到,后递增和后递减运算符是 LTR 关联的。但是在其他一些书中,它给出的所有增量和减量(post 和 pre)都是 RTL 关联的..!! 任何人都可以为 java 提供正确的运算符优先级和关联性表吗?
c++ - C++:输入和输出流运算符:关联性
理论上的输入/输出流操作符关联性:
左到右
(例如,据此:Sait Mary's University website
实践中的输入/输出流运算符关联性:
输出(MSVCPP 2010、2012):
此示例演示以从右到左的顺序调用函数(尽管它们的值按预期的从左到右打印)。
问题: 此代码示例如何与关于 LEFT TO RIGHT 执行的标准词相关联?为什么函数执行按从右到左的顺序执行?