Haskell中的除法误差

Haskell中的除法误差,haskell,functional-programming,Haskell,Functional Programming,在学校的最后一个小时,我们开始学习哈斯克尔。我们使用的原因是它的快速和易于使用 我开始输入标准函数,如*,+。。。 但这种划分并不起作用。我尝试了5/2或4/2,得到了以下消息: "Type error in infix application expression : 3 / 5 operator : / type : Float -> Float -> Float does not match : Int -&g

在学校的最后一个小时,我们开始学习哈斯克尔。我们使用的原因是它的快速和易于使用

我开始输入标准函数,如
*
+
。。。 但这种划分并不起作用。我尝试了
5/2
4/2
,得到了以下消息:

"Type error in infix application
 expression       : 3 / 5
 operator         : /
   type           : Float -> Float -> Float
   does not match : Int   -> Int   -> a "
如何使用除法运算符从
5/2
获取
2.5


我尝试了
div52
,但后来我得到了
2
,而不是
2.5
错误消息说
/
需要浮点(“实数”)数字,而您提供的是整数

您可以将参数显式设置为浮点:
5.0/2.0

您可以将值转换为浮点(适用于GHC,未尝试):

按照

  • 数字文字不会重载(即使在使用
    --overloading
    标志时也是如此)。因此,
    3
    属于
    Int
    类型,而
    3.0
    属于
    Float
    类型。因此,您永远无法编写
    2+2.3
    ,尽管在重载模式下,您可以同时编写
    2+3
    2.0+3.0
此外:

  • 有五个内置类型类,具有以下实例:
    • 数值:
      Int
      Float
因此,为了得到浮点除法,必须使用显式浮点文本,例如
5.0/2.0


值得注意的是,在Haskell本身(氦只是Haskell的一个子集)中,
5/2
表达式的类型很好,将具有
分数a=>a
,但氦似乎根本没有
分数
类型,只有
Int
浮点
作为数字类型,所以,实际上有效的Haskell,会像你们所期望的那样,在氦中不起作用

如果您使用的是氦气,您可能会按照网站说明使用
cabal
安装氦气:

> cabal install helium lvmrun

然后您应该可以访问GHC和GHCi。尝试将GHCi作为交互式shell运行,看看这是否有帮助。您可能会遇到比Hemium更难阅读的错误,但Haskell的类型错误在绝大多数情况下都是非常有用的。

FYI,
div
函数应该是整数除法,而不是浮点除法,这是两个独立且完全有用的东西。感谢您的解释。我明白了,它现在起作用了。
> cabal install helium lvmrun