从Haskell的Int获取sqrt
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从Haskell的Int获取sqrt相关的知识,希望对你有一定的参考价值。
我如何从sqrt
获得Int
。
我试试这样:
sqrt . fromInteger x
但是类型兼容性会出错。
答案
使用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
的结果
我认为diagram中的类Haskell Wikibook在这种情况下非常有用。
另一答案
也许你想要结果也是Int
?
isqrt :: Int -> Int
isqrt = floor . sqrt . fromIntegral
您可能想用floor
或ceiling
替换round
。 (顺便说一句,这个函数的类型比我给出的更通用。)
另一答案
请记住,应用程序绑定比任何其他运算符更紧密。这包括组成。你想要的是什么
sqrt $ fromIntegral x
然后
fromIntegral x
将首先评估,因为隐式应用程序(空间)比显式应用程序($)绑定得更紧密。
或者,如果您想了解合成如何工作:
(sqrt . fromIntegral) x
括号确保首先计算合成运算符,然后生成的函数是应用程序的左侧。
以上是关于从Haskell的Int获取sqrt的主要内容,如果未能解决你的问题,请参考以下文章