haskell 中负整数的除法规则是什么?

wxw*_*wxw 1 haskell division modulo

在 GHCI 中,我得到以下结果:

div (-7) ( 2) = -4
div ( 7) (-2) = -4
div (-7) (-2) =  3

mod ( 7)  ( 2) =  1
mod ( 7)  (-2) = -1
mod (-7)  ( 2) =  1
mod (-7)  (-2) = -1
Run Code Online (Sandbox Code Playgroud)

并且div 4 (-3)-2并且mod 4 (-3)-2

我无法理解如何获得这些结果。有什么法律或规则吗?什么是正确的计算步骤?

Wil*_*sem 5

通常最好先查看文档。对于mod函数,我们看到:

mod :: a -> a -> a

整数模,满足

(x `div` y)*y + (x `mod` y) == x
Run Code Online (Sandbox Code Playgroud)

所以x `mod` y计算如下:

mod x y = x - y * (div x y) -- logically equivalent definition
Run Code Online (Sandbox Code Playgroud)

和:

div :: a -> a -> a

向负无穷大截断的整数除法。

因此,如果除法是-3.5div则将返回-4

所以:

mod 7 2       = 7 - 2*(div 7 2)         = 7 - 2 * 3       = 7 - 6    = 1
mod 7 (-2)    = 7 - (-2)*(div 7 (-2))   = 7 - (-2) * (-4) = 7 - 8    = -1
mod (-7) 2    = (-7) - 2 * (div (-7) 2) = (-7) - 2 * (-4) = (-7) + 8 = 1
mod (-7) (-2) = (-7) - (-2) * (div (-7) (-2)) = -7 - (-2) * 3 = -7 + 6 = -1
Run Code Online (Sandbox Code Playgroud)