在Haskell中共同使用楼层和sqrt

时间:2017-09-21 04:18:17

标签: haskell sqrt floor

我希望我的函数读取一个整数并将平方根向下舍入到最接近的整数。这就是我尝试过的:

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

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

1 个答案:

答案 0 :(得分:6)

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))