在Haskell中将Int划分为Int

宝龙

我想要一个从给定标记列表计算平均标记的函数。这是我到目前为止所做的:

getAverageRate :: [Int]->Int
getAverageRate marks = (fromIntegral (foldr (+) 0 marks))/(fromIntegral (length marks))

我想做的是通过使用“文件夹”获得列表中所有标记的总和,然后除以“长度标记”。尽管我已经使用过'fromIntegral',但仍然出现此错误,我找不到问题。

No instance for (Fractional Int) arising from a use of `/'
Possible fix: add an instance declaration for (Fractional Int)
In the expression:
  (fromIntegral (foldr (+) 0 marks)) / (fromIntegral (length marks))
In an equation for `getAverageRate':
    getAverageRate marks
      = (fromIntegral (foldr (+) 0 marks))
        / (fromIntegral (length marks))
丹尼尔·格拉泽(Daniel Gratzer)

事情是Int代表一个整数,所以能够除以整数是没有意义的,因为大多数除法运算得出的结果都不是整数。

幸运的是div我们有,这是整数除法,所以您可以

 average :: [Int] -> Int
 average [] = error "Can't average an empty list"
 average xs = sum xs `div` length xs

如果您不想使用整数除法,那么我们可以做类似的事情

 average :: [Int] -> Double
 average xs = fromIntegral (sum xs) / fromIntegral (length xs)

只是将一切提升为一个Double部门。

最后,您可以选择一种四舍五入的方法,然后使用现有的方法

 average xs = round $ fromIntegral (sum xs) / fromIntegral (length xs)

(友好的邻里警告sum是邪恶的,foldl而不是使用foldl'因此-O2在使用长列表时一定要进行编译

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Openmesh中将网格划分为连接的组件

来自分类Dev

在Geoserver中将线划分为不同的颜色

来自分类Dev

在python中将点云划分为象限

来自分类Dev

在SQL中将日期范围划分为几周

来自分类Dev

在c中将数组划分为子数组

来自分类Dev

如何在Spark中将单个RDD划分为多个RDD

来自分类Dev

在Matlab中将正态分布划分为等概率区域

来自分类Dev

在Pyspark中将数据框的复杂行划分为简单行

来自分类Dev

在熊猫数据框中将行划分/拆分为多行

来自分类Dev

在Spring Integration测试中将时间划分为UTC

来自分类Dev

在Python中将字典列表划分为子字典

来自分类Dev

Haskell - 将字符串列表拆分为 (String, [Int]) 形式的元组

来自分类Dev

如何在c中划分2 int?

来自分类Dev

Haskell中的Int文字

来自分类Dev

查找Haskell Int精度

来自分类Dev

Haskell中的Int文字

来自分类Dev

查找Haskell Int精度

来自分类Dev

Haskell concat Int

来自分类Dev

Haskell除以Int的倍数

来自分类Dev

在{}中将'65280'从'int'转换为'short int'

来自分类Dev

在C中将int转换为int

来自分类Dev

在Flutter中将Future <int>转换为int

来自分类Dev

在C中将int转换为int

来自分类Dev

在Haskell中将字符串读取为Int的性能(字节字符串与[字符])

来自分类Dev

在Haskell中将Int定义为类型类的实例时出现问题

来自分类Dev

Haskell作业-小数列表[Int]-> Int

来自分类Dev

基本haskell:将[[int]]转换为[int]

来自分类Dev

在python中将图像划分为5x5块,并为每个块计算直方图

来自分类Dev

如何在SWT中将合成物划分为不同的空间