在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
并没有真正理解。
答案 0 :(得分:10)
这是因为-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