2016-05-22 18 views
3

In GHCI erhalte ich die folgende:Haskell - Strange Abschneiden Verhalten von `div`

λ> -1 `div` 2 
0 

jedoch:

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

Das Problem entstand, als ich mit einer Funktion divPair:

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

λ> divPair (-1, -2) 2 
(-1,-1) 

was war wirklich eine Überraschung für mich, wie ich es (0, -1) produzieren wollte.

Was ist hier passiert? Ich nehme an, ich habe in Haskell nichts über div verstanden.

Antwort

10

das, weil -1 `div` 2 ist tatsächlich als -(1 `div` 2) analysiert die -0 oder nur 0 als 1 `div` 2 gleich gleich 0. Sie sollten (-1) `div` 2 verwenden.

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