我发现div
和/
的行为之间存在一种相当奇怪的不一致性。
*ghci> :t 1 `div` 0
1 `div` 0 :: Integral a => a
*ghci> :t 1 / 0
1 / 0 :: Fractional a => a
*ghci> 1 / 0
Infinity
*ghci> 1 `div` 0
*** Exception: divide by zero
我很惊讶地发现分数除以零会导致Infinity
,而div
则会正确地引发异常。对于/
来说,NaN
也是可以接受的,但为什么要用Infinity
呢?这样的结果没有数学上的理由。请问您知道原因吗?
1 / 0
的结果返回为“无穷大”是完全合理的。这不仅是唯一可接受的返回值,但却是最具有意义性的一个。请注意,如果您计算1 / 0 :: Rational
,也会收到“除以零”的错误提示。 - Daniel Fischer(0/0) /= (0/0)
)。 - Tikhon Jelvis1/0
不是唯一合理的值。但是亚历山大紧致化也破坏了实数集许多有用的特性 - 更不用说Čech紧致化了。 - Daniel Fischer