Получить sqrt от Int в Haskell
как я могу получить sqrt С Int.
Я попробовать так:
sqrt . fromInteger x
но получаю ошибку с совместимостью типов.
3 ответов
используя fromIntegral:
Prelude> let x = 5::Int
Prelude> sqrt (fromIntegral x)
2.23606797749979
и Int и Integer экземпляров Integral:
fromIntegral :: (Integral a, Num b) => a -> bберет свойInt(который является экземпляромIntegral) и "делает" егоNum.sqrt :: (Floating a) => a -> aждетFloatingиFloatingнаследовать отFractional, который наследует отNum, так что вы можете спокойно пройти кsqrtрезультатfromIntegral
я думаю, что занятия - схемы на Haskell Wikibook весьма полезно в этом случае.
возможно, вы хотите, чтобы результат был Int а?
isqrt :: Int -> Int
isqrt = floor . sqrt . fromIntegral
вы можете заменить floor С ceiling или round.
(Кстати, эта функция имеет более общий тип, чем тот, который я дал.)
помните, приложение связывается более плотно, чем любой другой оператор. Это включает в себя композицию. То, что вы хотите
sqrt $ fromIntegral x
затем
fromIntegral x
будет оценено сначала, потому что неявное приложение (пространство) связывается более плотно, чем явное приложение ($).
альтернативно, если вы хотите увидеть, как будет работать композиция:
(sqrt . fromIntegral) x
скобки убедитесь, что сначала вычисляется оператор композиции, а затем результирующий функция-это левая сторона приложения.