为什么在Haskell中0 ^ 0 == 1?

桑蒂·丹多瓦(Santi Dandois)

为什么在Haskell 0 ^ 0 == 1中?为什么不0 ^ 0 == 0?也许应该引发一些错误...

*Main> 0^0
1
*Main> 0**0
1.0

提前谢谢

GHCi,版本7.10.3

西尔维奥·梅奥洛(Silvio Mayolo)

当您查看签名时,这很有道理。

(^) :: (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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章