我对 Haskell 中运算符优先级的规则感到困惑。
更具体地说,为什么会这样:
*Main> 2 * 3 `mod` 2
0
与此不同?
*Main> 2 * mod 3 2
2
我对 Haskell 中运算符优先级的规则感到困惑。
更具体地说,为什么会这样:
*Main> 2 * 3 `mod` 2
0
与此不同?
*Main> 2 * mod 3 2
2
函数调用绑定最紧密,所以
2 * mod 3 2
是相同的
2 * (mod 3 2)
请记住,mod
这里没有用作运算符,因为没有反引号。
现在,当mod
以中缀形式使用时,它的优先级为 7,它(*)
也有。因为它们具有相同的优先级,并且是左结合的,所以它们只是从左到右解析:
(2 * 3) `mod` 2
2*3 = 6 然后mod 2
= 3 没有余数......6 mod 2 = 0
你的答案也是如此。在第二种情况下,您正在执行 2 *,其结果mod 3 2
是2 * 1 = 2
. 因此,您的答案是2
……。您的运算符优先级保持不变,您只是对其进行了排列,因此相应地表达了答案。