world tutorial simbolos online hello descargar constructora company haskell

tutorial - haskell simbolos



Operadores integrales quot vs. div (2)

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?


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".


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.