为什么在Haskell 0 ^ 0 == 1中?为什么不0 ^ 0 == 0?也许应该引发一些错误...
*Main> 0^0
1
*Main> 0**0
1.0
提前谢谢
GHCi,版本7.10.3
当您查看签名时,这很有道理。
(^) :: (Num a, Integral b) => a -> b -> a
该代码旨在用于非负整数指数。它可能是递归实现的,因此其行为就像重复乘法一样。因此,有意义的是,“零功率就是一”是先例,因为我们实际上是在谈论重复乘法。
(^^) :: (Fractional a, Integral b) => a -> b -> a
这个与上一个非常相似,不同之处在于它也适用于负指数,因为它的基数是分数。仍然,它的行为就像重复乘法或重复除法(如果指数分别为正数或负数),因此再次有意义的是,将那些运算中的任何一个重复零次将导致1
乘法身份。
(**) :: Floating a => a -> a -> a
在Haskell中,浮点类型通常符合IEEE标准,而IEEE具体定义pow(0.0, 0.0)
为1.0
。因此,我想Haskell只是在遵循一个标准,以便在这种情况下它与其他语言保持一致。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句