Haskell中的运算符优先级

时间:2013-02-26 02:05:10

标签: haskell

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

*Main> 2 * 3 `mod` 2
0

与此不同?

*Main> 2 * mod 3 2
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 ....您的运算符优先级保持不变,您只需安排它,以便相应地表达答案。