7

我对 Haskell 中运算符优先级的规则感到困惑。
更具体地说,为什么会这样:

*Main> 2 * 3 `mod` 2
0

与此不同?

*Main> 2 * mod 3 2
2
4

2 回答 2

15

函数调用绑定最紧密,所以

2 * mod 3 2

是相同的

2 * (mod 3 2)

请记住,mod这里没有用作运算符,因为没有反引号。

现在,当mod以中缀形式使用时,它的优先级为 7,它(*)也有。因为它们具有相同的优先级,并且是左结合的,所以它们只是从左到右解析:

(2 * 3) `mod` 2
于 2013-02-26T02:12:18.337 回答
2

2*3 = 6 然后mod 2= 3 没有余数......6 mod 2 = 0你的答案也是如此。在第二种情况下,您正在执行 2 *,其结果mod 3 22 * 1 = 2. 因此,您的答案是2……。您的运算符优先级保持不变,您只是对其进行了排列,因此相应地表达了答案。

于 2013-02-26T02:09:49.577 回答