我对Haskell中运算符优先级的规则感到困惑。
更具体地说,这是为什么:Haskell中的运算符优先级
*Main> 2 * 3 `mod` 2
0
不同?
*Main> 2 * mod 3 2
2
我对Haskell中运算符优先级的规则感到困惑。
更具体地说,这是为什么:Haskell中的运算符优先级
*Main> 2 * 3 `mod` 2
0
不同?
*Main> 2 * mod 3 2
2
函数调用结合最紧密的,因此
2 * mod 3 2
相同
2 * (mod 3 2)
记住mod
没有被使用作为一个经营者在这里,因为没有反引号。
现在,当mod
以中缀形式使用时,其优先级为7,其中(*)
也具有。因为它们具有相同的precendence,和是左结合,它们被简单地从左解析到右:
(2 * 3) `mod` 2
谢谢你解释:) – 2013-02-26 02:17:59
2 * 3 = 6,然后mod 2
= 3余数不...所以6 mod 2 = 0
是你的答案出现。 在你的第二个例子中,你正在做的是mod 3 2
的结果,即2 * 1 = 2
。因此,您的答案是2
....您的运营商优先级保持不变,您只是安排它,以便相应地表达答案。
感谢您的回答! – 2013-02-26 02:20:27
也见[前奏操作者优先级(http://stackoverflow.com/a/30288988/3041008) – mucaho 2015-05-17 16:19:43