Haskell - `div` 的奇怪截断行为
Haskell - Strange truncation behavior of `div`
在 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 `div` 2
实际上被解析为 -(1 `div` 2)
等于 -0
或者只是 0
因为 1 `div` 2
等于 0。你应该使用 (-1) `div` 2
.
Prelude> -(1 `div` 2)
0
Prelude> (-1) `div` 2
-1
在 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 `div` 2
实际上被解析为 -(1 `div` 2)
等于 -0
或者只是 0
因为 1 `div` 2
等于 0。你应该使用 (-1) `div` 2
.
Prelude> -(1 `div` 2)
0
Prelude> (-1) `div` 2
-1