gpt4 book ai didi

haskell - 没有 (Floating Int) 实例

转载 作者:行者123 更新时间:2023-12-02 09:27:44 30 4
gpt4 key购买 nike

我正在学习 Haskell。我创建了一个函数,该函数返回基数“b”中最多“n”的乘法表。数字被填充为“w”位。作为最后一步,我想自动计算“w”。为什么这不能编译?

-- Number of digits needed for the multiplication table n*n in base 'base'
nOfDg :: Int -> Int-> Int
nOfDg n base = 1 + floor ( logBase base (n*n))

错误:

No instance for (Floating Int)
arising from a use of `logBase' at C:\haskel\dgnum.hs:4:24-38
Possible fix: add an instance declaration for (Floating Int)
In the first argument of `floor', namely `(logBase b (n * n))'
In the second argument of `(+)', namely `floor (logBase b (n * n))'
In the expression: 1 + floor (logBase b (n * n))

最佳答案

logBase 采用两个实现 float 类型类的参数。在将参数传递给 logBase 之前,您需要对参数调用 fromIntegral。这是用 6.10.3 为我编译的:

nOfDg :: Int -> Int-> Int
nOfDg n base = 1 + floor ( logBase (fromIntegral base) (fromIntegral (n*n)))

您必须记住,Haskell 是非常强类型的,因此您不能仅仅假设提供给函数的 Int 参数将自动强制为日志函数通常采用的 float 。

关于haskell - 没有 (Floating Int) 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1970484/

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