【问题标题】:Haskell divide the sum of second element in a tupleHaskell 将元组中第二个元素的总和相除
【发布时间】:2025-12-11 01:05:01
【问题描述】:

我有一个元组列表,我想计算出平均值: (所有整数的总和)/列表长度

列表如下:

[("Student1", 1), ("Student2", 2), ("Student3", 3)]

到目前为止,我有一个函数可以将所有“年龄”(1、2 和 3)相加,但我不知道如何将它与列表长度的划分结合起来。

功能:

addMarks :: [(String, Int)] -> Int
addMarks list = sum . map snd / length(list)

Length(list) 给我 3,所以如果我可以将 sum 函数除以长度,我将得到我的平均值。

如果可以,不要使用 lamda 表达式,

谢谢! 汤姆

【问题讨论】:

    标签: haskell


    【解决方案1】:

    如果你想要Int 中的结果,请使用div 函数。使用 / 将给出分数结果。这段代码应该可以工作:

    addMarks :: [(String, Int)] -> Int
    addMarks list = sum (map snd list) `div` length(list)   
    

    或者更简洁的版本:

    addMarks :: [(String, Int)] -> Int
    addMarks list = sum nums `div` length nums
      where nums = map snd list
    

    您也可以使用/ 函数来解决这个问题。然后,您必须使用 fromIntegral 之类的函数将它们转换为正确的类型。

    【讨论】:

    • +1,谢谢伙计,正是我想要的!但是,我确实希望它是浮点数 - 因为它正在计算平均值,并且平均值需要允许小数点。将 div 更改为 '/' 会给我输入错误。有什么建议吗?
    • 更改您的类型签名以表明您希望Float 成为输出。然后使用fromIntegral函数正确转换它们。
    最近更新 更多