我对Haskell中运算符优先级的规则感到困惑 更具体地说,为什么:
*Main> 2 * 3 `mod` 2
0
与此不同?
*Main> 2 * mod 3 2
2
答案 0 :(得分:13)
函数调用绑定最紧密的,所以
2 * mod 3 2
与
相同2 * (mod 3 2)
请注意,由于没有反引号,因此mod
未被用作运算符。
现在,当mod
以中缀形式使用时,它的优先级为7,(*)
也有。由于它们具有相同的优先级,并且是左关联的,因此只需从左到右进行解析:
(2 * 3) `mod` 2
答案 1 :(得分:2)
2 * 3 = 6,然后mod 2
= 3,没有余数...所以6 mod 2 = 0
就是你的回答。
在你的第二种情况下,你正在做mod 3 2
2 * 1 = 2
的结果2 *。因此,您的答案是2
....您的运算符优先级保持不变,您只需安排它,以便相应地表达答案。