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 -> bIntegral 类型转换为任何 Num 类型。因此,您可以将其实现为:

isSquareNumber :: Int -> Bool
isSquareNumber x = x >= 0 && f == 0.0
    where (_,f) = properFraction (sqrt (fromIntegral x))

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...