Type类积分有两个操作quot
和div
,但在哈斯克尔2010语种报告它没有规定他们应该做的事情.假设这div
是不可分割的,有什么quot
不同,或者目的是quot
什么?你什么时候使用一个,而另一个?
aug*_*tss 102
引用Haskell报告中的第6.4.2节:
在quot
,rem
,div
,和mod
类方法满足这些法规如果y为非零值:
(x `quot` y)*y + (x `rem` y) == x
(x `div` y)*y + (x `mod` y) == x
Run Code Online (Sandbox Code Playgroud)
quot
是整数除法被截断为零,而结果div
被截断为负无穷大.
该div
功能通常是更自然的quot
功能,而功能对应于现代机器上的机器指令,因此它更有效.
Stu*_*etz 31
处理负数时,两者表现不同.考虑:
Hugs> (-20) `divMod` 3
(-7,1)
Hugs> (-20) `quotRem` 3
(-6,-2)
Run Code Online (Sandbox Code Playgroud)
在这里,-7 * 3 + 1 = -20
和-6 * 3 + (-2) = -20
,但这两种方式给你不同的答案.
另请参阅此处:http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html
定义为quot
"整数除法截断为零",而定义为div
"整数除法截断为负无穷大".