我希望函数读取整数并返回四舍五入到最接近整数的平方根。这是我尝试过的:

roundSqrt :: Int -> Int
roundSqrt x = floor (sqrt x)


我得到的错误是,“无法推断出-sqrt'的使用引起的(浮动a)”,但我不明白这意味着什么。

最佳答案

sqrt的类型是:

λ> :t sqrt
sqrt :: Floating a => a -> a


地板的类型是:

λ> ::t floor
floor :: (RealFrac a, Integral b) => a -> b


因此,sqrt需要具有Floating约束的类型。您可以使用fromIntegral函数来实现:

roundSqrt :: Int -> Int
roundSqrt x = floor (sqrt (fromIntegral x))

08-25 23:29