2016-05-22 15 views
3

`の奇妙な切り捨て動作私は、次を得る:ハスケル - GHCiのでdiv`

λ> -1 `div` 2 
0 

しかし:

divPair :: (Int, Int) -> Int -> (Int, Int) 
divPair (a, b) n = (a `div` n, b `div` n) 

λ> divPair (-1, -2) 2 
(-1,-1) 
:私は機能 divPairを使用していたとき

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

問題が発生しました

私はそれが(0, -1)を生産することを期待していたので、本当に驚きでした。

ここで何が起こりましたか?ハスケルでdivのことを本当に理解していなかったと思います。 -1 `div` 2ためだ

答えて

10

は、実際に-0またはちょうど0あなたは(-1) `div` 2を使用する必要があります0 1 `div` 2と等しい等しい-(1 `div` 2)として解析されます。

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