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 の優先順位があり、7 の優先順位(*)もあります。それらは同じ優先順位を持ち、左結合であるため、単純に左から右に解析されます。

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

2 * 3 = 6、次にmod 2= 3で、余り6 mod 2 = 0はありません...あなたの答えもそこにあります。2番目のケースでは、2*を実行しています。その結果mod 3 2はです2 * 1 = 2。したがって、あなたの答えは2....あなたの演算子の優先順位は同じままです、あなたは答えがそれに応じて表現されるようにそれを配置しただけです。

于 2013-02-26T02:09:49.577 に答える