Интегральные операторы quot vs. div

Тип classа Интеграл имеет две операции quot и div , но в Haskell 2010 Language Report не указано, что они должны делать. Предполагая, что div является интегральным делением, что иначе quot , или какова цель quot ? Когда вы используете один, а другой?

Процитировать раздел 6.4.2 из отчета Haskell:

Методы classа quot , rem , div и mod удовлетворяют этим законам, если y отличен от нуля:

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

– это целочисленное деление, усеченное к нулю, а результат div усечен в сторону отрицательной бесконечности.

Функция div часто является более естественной для использования, тогда как функция quot соответствует машинной инструкции на современных машинах, поэтому она несколько эффективнее.

Они ведут себя по-разному, когда имеют дело с отрицательными числами. Рассматривать:

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

Здесь -7 * 3 + 1 = -20 и -6 * 3 + (-2) = -20 , но два способа дают вам разные ответы.

Также см. Здесь: http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html

Определение для quot представляет собой «целочисленное деление, усеченное к нулю», тогда как определение для div является «целым делением, усеченным в сторону отрицательной бесконечности».

  • Haskell: как оценить строку типа «1 + 2»
  • Смущает смысл classа «Альтернативный» и его отношение к другим типам classов
  • Заказ параметров для использования каррирования
  • Различие между classами MonadPlus, Alternative и Monoid?
  • Как я могу опробовать файлы, сокеты или дескрипторы для чтения / записи в Haskell?
  • Как создать многовариантную функцию haskell?
  • IO не работает при использовании getLine и putStr
  • Почему 3 и x (которые были назначены 3) имеют разные предполагаемые типы в Haskell?
  • Lambda для выражений типа в Haskell?
  • Возвращать определенный тип внутри Haskell
  • Какие символы разрешены для операторов haskell?
  • Давайте будем гением компьютера.