haskell中的'mod'和-1

Gen*_*adi 1 haskell

为什么下面的一块给4?

(\x -> (x-1) `mod` 5) 0
Run Code Online (Sandbox Code Playgroud)

Yan*_*ier 6

因为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将进行整数除法.

  • `div`的对应应该是`quot`,而不是`/`. (7认同)

IVl*_*lad 5

根据定义,-1 5是4.