【发布时间】: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