为什么在Haskell 0 ^ 0 == 1?为什么不0 ^ 0 == 0?或者也许应该提出一些错误......
*Main> 0^0
1
*Main> 0**0
1.0
Run Code Online (Sandbox Code Playgroud)
谢谢你提前
GHCi,版本7.10.3
当你看到签名时,它有点意义.
(^) :: (Num a, Integral b) => a -> b -> a
Run Code Online (Sandbox Code Playgroud)
这个设计用于非负整数指数.它可能是递归实现的,因此它的行为类似于重复乘法.因此,有意义的是"零功率的任何一个"是先例的规则,因为我们真的在谈论重复乘法.
(^^) :: (Fractional a, Integral b) => a -> b -> a
Run Code Online (Sandbox Code Playgroud)
这个很像前一个,除了它也适用于负指数,因为它的基数是小数.尽管如此,它的行为类似于重复乘法或重复除法(如果指数分别为正或负),那么再次重复这些操作中的任何一个零时应该产生1乘法同一性是有意义的.
(**) :: Floating a => a -> a -> a
Run Code Online (Sandbox Code Playgroud)
在Haskell中,浮点类型通常符合IEEE标准,IEEE特别定义pow(0.0, 0.0)为1.0.因此,我想,Haskell只是符合标准,因此在这种情况下它与其他语言的行为一致.
| 归档时间: |
|
| 查看次数: |
323 次 |
| 最近记录: |