如何解决isSquareNumber 函数的 Haskell 类型声明问题
我必须编写一个函数来确定一个数字是否是一个完美的平方,我能够做到:
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 (fromIntegral x))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。