0xA*_*xAX 26 haskell types sqrt
我怎样才能sqrt从Int.
我试试这样:
sqrt . fromInteger x
Run Code Online (Sandbox Code Playgroud)
但是类型兼容性会出错.
aug*_*tss 40
也许你想要的结果也是Int一样的?
isqrt :: Int -> Int
isqrt = floor . sqrt . fromIntegral
Run Code Online (Sandbox Code Playgroud)
您可能想要floor用ceiling或替换round.(顺便说一句,这个函数的类型比我给出的更通用.)
Mar*_*coS 39
使用fromIntegral:
Prelude> let x = 5::Int
Prelude> sqrt (fromIntegral x)
2.23606797749979
Run Code Online (Sandbox Code Playgroud)
这两个Int和Integer是的实例Integral:
fromIntegral :: (Integral a, Num b) => a -> b拿你的Int(这是一个实例Integral)和"使它"成为一个Num.
sqrt :: (Floating a) => a -> a期望a Floating,并Floating继承自Fractional哪个继承Num,所以你可以安全地传递给sqrt结果fromIntegral
Edw*_*ard 11
请记住,应用程序绑定比任何其他运算符更紧密.这包括组成.你想要的是什么
sqrt $ fromIntegral x
Run Code Online (Sandbox Code Playgroud)
然后
fromIntegral x
Run Code Online (Sandbox Code Playgroud)
将首先评估,因为隐式应用程序(空间)比显式应用程序($)绑定得更紧密.
或者,如果您想了解合成如何工作:
(sqrt . fromIntegral) x
Run Code Online (Sandbox Code Playgroud)
括号确保首先计算合成运算符,然后生成的函数是应用程序的左侧.
| 归档时间: |
|
| 查看次数: |
34260 次 |
| 最近记录: |