【问题标题】:Haskell - calculating an Int *100 : why does one way work, however, the other way provides an error?Haskell - 计算 Int *100 :为什么一种方法有效,但是另一种方法会出错?
【发布时间】:2018-02-17 04:55:39
【问题描述】:

我是haskell 的新手,我正在尝试了解为什么某些东西不能在haskell 中编译。例如,我收到以下错误:

 • Couldn't match expected type ‘Int -> Float’
                  with actual type ‘Float’
    • Possible cause: ‘(/)’ is applied to too many arguments
      In the expression: (fromIntegral x :: Float) / 100.0
      In an equation for ‘percent’:
          percent x = (fromIntegral x :: Float) / 100.0

对于此代码:

percent :: Int -> Int -> Float
percent x =  (fromIntegral x :: Float) * 100.0

或者是这样的:

    percent :: Int -> Int -> Float
    percent x =   a * 100.0
        where a = fromIntegral x :: Float

虽然这种方法有效,但我在post 上发现了这种方法,但它稍微复杂一些,因为它会在乘以 100 之前将两个整数相除?它遵循与我编码的方法类似的方法,只涉及一个 int 乘以 100。我编码的第二个,我模仿下面看到的代码。我不明白为什么上面的方法不起作用,但是,下面做类似事情的方法起作用。

percent :: Int -> Int -> Float
percent x y =   100 * ( a / b )
  where a = fromIntegral x :: Float
        b = fromIntegral y :: Float

我非常感谢您的帮助,因为我是 Haskell 的新手,并且仍在尝试了解它的运作方式。

【问题讨论】:

    标签: function haskell casting int


    【解决方案1】:

    您的类型表示该函数需要两个 Int 参数:

    percent :: Int -> Int -> Float
    

    但是你的实现只需要一个:

    percent x = {- ... -}
    

    更改其中一项。

    【讨论】:

    • 感谢您的帮助。我仍在尝试掌握如何定义类型。你的描述很清楚。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-04
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 2019-07-13
    • 1970-01-01
    • 2012-03-05
    相关资源
    最近更新 更多