gpt4 book ai didi

haskell - 模组,Haskell 中的 div

转载 作者:行者123 更新时间:2023-12-03 14:25:19 25 4
gpt4 key购买 nike

有人可以解释为什么这不起作用吗?

main = do
let a = 50
let y = 7
let area = (a ** y)
print (area)
print (a `mod` y)

我希望它打印出来:
781250000000   -- 50 to the 7th power
1 -- remainder of 50/7

但相反,我得到了一系列像这样的模棱两可的类型错误:
test.hs:2:13:
No instance for (Num a0) arising from the literal `50'
The type variable `a0' is ambiguous
Possible fix: add a type signature that fixes these type variable(s)
Note: there are several potential instances:
instance Num Double -- Defined in `GHC.Float'
instance Num Float -- Defined in `GHC.Float'

最佳答案

简单的;看看(**)的类型和 mod :

Prelude> :t (**)
(**) :: Floating a => a -> a -> a
Prelude> :t mod
mod :: Integral a => a -> a -> a

它是一种少有的同时具有整数特性和浮点数特性的数值类型。你有几个选择来处理这个问题:
  • 使用可以很好地处理类似整数的幂运算。例如,(^) :: (Integral b, Num a) => a -> b -> a .
  • 使用可以很好地处理浮点数的模运算。例如,mod' :: Real a => a -> a -> a .
  • 使用 realToFrac :: (Real a, Fractional b) => a -> b 显式转换为浮点类型在调用 (**) 之前.
  • 使用 floor :: (RealFrac a, Integral b) => a -> b 显式转换为类整数类型(或其他舍入函数)在调用 mod 之前.
  • 关于haskell - 模组,Haskell 中的 div,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34231683/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com