haskell - isSquareNumber 函数的 Haskell 类型声明问题
问题描述
我必须编写一个函数来确定一个数字是否是一个完美的正方形,我能够做到:
isSquareNumber x
| x < 0 = False
| otherwise = snd (properFraction (sqrt x)) == 0.0
但我必须使用给定的类型声明:isSquareNumber :: Int -> Bool
Whitout 它,它工作正常,但是当我添加它时,我得到了错误。
解决方案
sqrt :: Floating a => a -> a
不适用于 an Int
,但适用于Floating
类型,并且 anInt
不是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))
推荐阅读
- uicollectionview - 在 UICollectionView 中自动调整单元格大小(全部在代码中)
- angular - 使 Angular 函数等待订阅完成
- node.js - Node/express 应用程序无法使用 mongoose 连接到 Mongodb Atlas
- python - 将 Pandas DataFrame 中的 2 列与 .loc 进行比较
- php - 无法在数据库中插入多个复选框数据
- javascript - 获取字符 Ascii 代码背后的数学
- node.js - 错误:找不到模块 '../constants.js' - 如果 pm2 在 Azure 应用服务上作为启动脚本运行
- laravel - 检查后端服务器中的验证 react-native-google-signin
- amazon-web-services - 从内部将 kubernetes 端点主机名解析为给定集群
- node.js - 如何使用 Docker 将具有 cron 作业的 NodeJS 应用程序容器化?