xji*_*xji 3 haskell division integer-division
在ghci我得到以下内容:
?> -1 `div` 2
0
Run Code Online (Sandbox Code Playgroud)
然而:
?> map (`div` 2) [-1]
[-1]
Run Code Online (Sandbox Code Playgroud)
我在使用函数时出现了问题divPair:
divPair :: (Int, Int) -> Int -> (Int, Int)
divPair (a, b) n = (a `div` n, b `div` n)
?> divPair (-1, -2) 2
(-1,-1)
Run Code Online (Sandbox Code Playgroud)
这对我来说真的是一个惊喜,因为我预计它会产生(0, -1).
这里发生了什么?我想我div在Haskell中并没有真正了解一些事情.
Dog*_*ert 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
Run Code Online (Sandbox Code Playgroud)