Operadores integrales quot vs. div

Tipo de clase Integral tiene dos operaciones, quot y div , pero en el Haskell 2010 Language Report no se especifica qué se supone que deben hacer. Suponiendo que div es una división integral, ¿qué tiene quot diferente, o cuál es el propósito de quot ? ¿Cuándo usas uno y el otro?

Para citar la sección 6.4.2 del informe Haskell:

Los métodos quot , rem , div y mod class satisfacen estas leyes si y no es cero:

 (x `quot` y)*y + (x `rem` y) == x (x `div` y)*y + (x `mod` y) == x 

quot es la división entera truncada hacia cero, mientras que el resultado de div se trunca hacia el infinito negativo.

La función div es a menudo la más natural de usar, mientras que la función quot corresponde a la instrucción de la máquina en máquinas modernas, por lo que es algo más eficiente.

Los dos se comportan de manera diferente cuando se trata de números negativos. Considerar:

 Hugs> (-20) `divMod` 3 (-7,1) Hugs> (-20) `quotRem` 3 (-6,-2) 

Aquí, -7 * 3 + 1 = -20 y -6 * 3 + (-2) = -20 , pero las dos formas dan respuestas diferentes.

También, mira aquí: http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html

La definición de quot es “división entera truncada hacia cero”, mientras que la definición de div es “división entera truncada hacia el infinito negativo”.