2016-05-22 172 views
3

的`奇怪的截斷行爲在ghci中我得到以下幾點:哈斯克爾 - div`

λ> -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並不是很瞭解。

回答

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