2013-02-26 161 views
6

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

比这个
*Main> 2 * 3 `mod` 2 
0 

不同?

*Main> 2 * mod 3 2 
2 
+0

也见[前奏操作者优先级(http://stackoverflow.com/a/30288988/3041008) – mucaho 2015-05-17 16:19:43

回答

13

函数调用结合最紧密的,因此

2 * mod 3 2 

相同

2 * (mod 3 2) 

记住mod没有被使用作为一个经营者在这里,因为没有反引号。

现在,当mod以中缀形式使用时,其优先级为7,其中(*)也具有。因为它们具有相同的precendence,和是左结合,它们被简单地从左解析到右:

(2 * 3) `mod` 2 
+0

谢谢你解释:) – 2013-02-26 02:17:59

2

2 * 3 = 6,然后mod 2 = 3余数不...所以6 mod 2 = 0是你的答案出现。 在你的第二个例子中,你正在做的是mod 3 2的结果,即2 * 1 = 2。因此,您的答案是2 ....您的运营商优先级保持不变,您只是安排它,以便相应地表达答案。

+0

感谢您的回答! – 2013-02-26 02:20:27