【问题标题】:Haskell + divisionHaskell + 除法
【发布时间】:2016-04-16 12:37:56
【问题描述】:

我能够对所有元组的第 z 个元素求和,但由于某种奇怪的原因,我的结果除以 2 后只得到 1。

averageYear :: [(String, String, Int)] -> Int
averageYear [] = 0
averageYear ((x,y,z):xs) = (z + (averageYear xs)) `div` (length xs)

谢谢!!

【问题讨论】:

  • 大声抱歉,大笨蛋

标签: haskell arithmetic-expressions


【解决方案1】:

@Dietrich Epp 在您的示例中,长度 xs 为零而不是二。

   averageYear ((x,y,z):xs) = (z + (averageYear xs)) `div` (length xs)

如果 xs 为空,则长度 xs 等于 0,然后除以零。

【讨论】:

    【解决方案2】:

    数学完全错误。

    averageYear [(_, _, 2010)] = (2010 + averageYear []) `div` 2
                               = (2010 + 0) `div` 2
                               = 2010 `div` 2
                               = 1005
    

    要计算平均值,您必须将总和除以项目数。

    average :: [Int] -> Int
    average xs = sum xs `div` length xs
    
    averageYear :: [(String, String, Int)] -> Int
    averageYear = average . map (\(_, _, year) -> year)
    

    【讨论】:

    • 很好的解决方案..你能澄清句号的作用( . )和斜线在最后一行的作用吗? ty
    • 在 Haskell 中,(.) 是函数组合运算符,\x -> y 是 lambda 表达式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    • 2021-12-26
    • 2013-03-21
    • 2014-01-22
    • 2019-04-27
    • 1970-01-01
    相关资源
    最近更新 更多