从 Haskell 中的 Int 获取 sqrt
如何从 Int
获取 sqrt
。
我尝试这样做:
sqrt . fromInteger x
但是出现类型兼容性错误。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
如何从 Int
获取 sqrt
。
我尝试这样做:
sqrt . fromInteger x
但是出现类型兼容性错误。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(3)
也许您也希望结果是
Int
?您可能需要将
floor
替换为ceiling
或round
。(顺便说一句,这个函数的类型比我给出的函数更通用。)
Perhaps you want the result to be an
Int
as well?You may want to replace
floor
withceiling
orround
.(BTW, this function has a more general type than the one I gave.)
使用
fromIntegral
:Int
和Integer
都是Integral
的实例:fromIntegral :: (积分a,数字b) =>一个-> b
获取您的Int
(它是Integral
的实例)并将其“变成”Num
。sqrt ::(浮动a)=>一个-> a
需要一个Floating
,并且Floating
继承自Fractional
,而Fractional
又继承自Num
,因此您可以安全地将fromIntegral
的结果传递给sqrt
我认为类 Haskell Wikibook 中的 rel="noreferrer">图表 在这方面非常有用案例。
Using
fromIntegral
:both
Int
andInteger
are instances ofIntegral
:fromIntegral :: (Integral a, Num b) => a -> b
takes yourInt
(which is an instance ofIntegral
) and "makes" it aNum
.sqrt :: (Floating a) => a -> a
expects aFloating
, andFloating
inherit fromFractional
, which inherits fromNum
, so you can safely pass tosqrt
the result offromIntegral
I think that the classes diagram in Haskell Wikibook is quite useful in this cases.
请记住,应用程序比任何其他运算符绑定得更紧密。这包括构图。您想要的是
then
将首先被评估,因为隐式应用程序(空格)比显式应用程序($)绑定更紧密。
或者,如果您想了解组合如何工作:
括号确保首先计算组合运算符,然后生成的函数是应用程序的左侧。
Remember, application binds more tightly than any other operator. That includes composition. What you want is
Then
will be evaluated first, because implicit application (space) binds more tightly than explicit application ($).
Alternately, if you want to see how composition would work:
Parentheses make sure that the composition operator is evaluated first, and then the resulting function is the left side of the application.