Haskell isSquareNumber 函数的类型声明问题
Haskell type declaration problem with isSquareNumber function
我必须编写一个函数来确定一个数字是否是完全平方数,我能够做到:
isSquareNumber x
| x < 0 = False
| otherwise = snd (properFraction (sqrt x)) == 0.0
但我必须使用给定的类型声明:isSquareNumber :: Int -> Bool
去掉它,它工作正常,但是当我添加它时,我得到错误。
sqrt :: Floating a => a -> a
不适用于 Int
,但适用于 Floating
类型,并且 Int
不是 Floating
类型。
您可以使用 fromIntegral :: (Integral a, Num b) => a -> b
将 Integral
类型转换为任何 Num
类型。因此,您可以将其实现为:
isSquareNumber :: Int -> Bool
isSquareNumber x = x >= 0 && f == 0.0
where (_, f) = properFraction (sqrt (<b>fromIntegral</b> x))
我必须编写一个函数来确定一个数字是否是完全平方数,我能够做到:
isSquareNumber x
| x < 0 = False
| otherwise = snd (properFraction (sqrt x)) == 0.0
但我必须使用给定的类型声明:isSquareNumber :: Int -> Bool
去掉它,它工作正常,但是当我添加它时,我得到错误。
sqrt :: Floating a => a -> a
不适用于 Int
,但适用于 Floating
类型,并且 Int
不是 Floating
类型。
您可以使用 fromIntegral :: (Integral a, Num b) => a -> b
将 Integral
类型转换为任何 Num
类型。因此,您可以将其实现为:
isSquareNumber :: Int -> Bool
isSquareNumber x = x >= 0 && f == 0.0
where (_, f) = properFraction (sqrt (<b>fromIntegral</b> x))