2013-02-26 156 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