我是 Haskell 新手,目前正在学习列表。
我有一个标记列表
[("Tom", 87, 78, 67), ("Dick", 56, 45, 72)]
我需要得到分数的总和及其平均值。这是我的方法。
创建一个函数来计算每个候选人的分数总和列表
sumOfMarks = (\(a, b, c, d) -> b + c + d)
并将该函数映射到原始列表
newList = map sumOfMarks [("Tom", 87, 78, 67), ("Dick", 56, 45, 72)]
创建一个函数来计算每个候选人的平均分数列表
avgList = map (`div`3) newList
合并所有原始列表、newList
和 avgList
期望的输出是
finalList = [("Tom", 87, 78, 67, 232, 77.34), ("Dick", 56, 45, 72, 173, 57.67)]
另一个问题是——这是否是解决问题的最佳方法以及是否有更好的方法?
最佳答案
您可以创建一个将 4 元组映射到 5 元组的函数,因此该函数如下所示:
map (\(n, a, b, c) -> (n, a, b, c, …)) oldList
我把...
作为练习。
请注意div :: Integral a => a -> a -> a
是整数除法。如果需要使用 float ,可以使用 (/) :: Fractional a => a -> a -> a
。为了将整数
数字转换为小数
数字,您可以使用 fromIntegral :: (Integral a, Num b) => a -> b
功能。
关于list - 合并元组列表和整数列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68858199/