Haskell - `div`的奇怪截断行为

时间:2016-05-22 16:27:52

标签: haskell division integer-division

在ghci我得到以下内容:

λ> -1 `div` 2
0

然而:

λ> map (`div` 2) [-1]
[-1]

当我使用函数divPair

时出现了问题
divPair :: (Int, Int) -> Int -> (Int, Int)
divPair (a, b) n = (a `div` n, b `div` n)

λ> divPair (-1, -2) 2
(-1,-1)

这对我来说真是一个惊喜,因为我预计它会产生(0, -1)

这里发生了什么?我想我对Haskell中的div并没有真正理解。

1 个答案:

答案 0 :(得分:10)

这是因为-1 `div` 2实际上被解析为-(1 `div` 2)等于-00等于1 `div` 2等于0.您应该使用(-1) `div` 2

Prelude> -(1 `div` 2)
0
Prelude> (-1) `div` 2
-1