gpt4 book ai didi

haskell - 整数类型之间的转换

转载 作者:行者123 更新时间:2023-12-02 07:47:25 26 4
gpt4 key购买 nike

这是一个非常愚蠢的问题,但我有点迷路了。这是函数

f :: (Bool,Int) -> Int
f (True,n) = round (2 ** n)
f (False,n) = 0

这是我遇到的一个错误

No instance for (Floating Int)
arising from a use of `**'
Possible fix: add an instance declaration for (Floating Int)
In the first argument of `round', namely `(2 ** n)'
In the expression: round (2 ** n)
In an equation for `f': f (True, n) = round (2 ** n)

我应该添加什么才能让它发挥作用?

最佳答案

(**) 是浮点取幂。您可能想改用 (^)

f :: (Bool,Int) -> Int
f (True,n) = 2^n
f (False,n) = 0

查看类型很有帮助:

Prelude> :t (**)
(**) :: Floating a => a -> a -> a
Prelude> :t (^)
(^) :: (Num a, Integral b) => a -> b -> a

错误消息告诉您 Int 不是 Floating 类型类的实例,因此您不能使用 (**)直接就可以了。您可以转换为某种浮点类型并返回,但这里最好直接使用整数版本。另请注意,(^) 仅要求指数 为整数。基数可以是任何数字类型。

关于haskell - 整数类型之间的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5880357/

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