因为mod被定义为积极的.div和mod在楼层基础上运行,而/和rem不运行.
Prelude> let x=(-2)
Prelude> let y=5
Prelude> (x`div`y)*y+(x`mod`y)
-2
Prelude> y*(truncate ((fromInteger x)/fromInteger y)) + (x`rem`y)
-2
Prelude> x`rem`y
-2
Prelude> x`mod`y
3
Prelude> (fromInteger x)/fromInteger y
-0.4
Prelude> x`div`y
-1
Run Code Online (Sandbox Code Playgroud)
附录:正如KennyTM正确指出的那样,我应该使用quot,而不是/:
Prelude> (x`quot`y)*y+(x`rem`y)
-2
Prelude> (x`quot`y)
0
Run Code Online (Sandbox Code Playgroud)
我根本就不记得了,而且太仓促了.quot将进行整数除法.