gpt4 book ai didi

haskell - 列出整数的平均值

转载 作者:行者123 更新时间:2023-12-02 18:52:45 28 4
gpt4 key购买 nike

我是 Haskell 和 Stackoverflow 的新手,我正在尝试自学 Haskell 编程,我正在根据我下载的一本书做一系列练习,想知道你们是否可以在这里帮助我。

我正在尝试编写一个名为 avgPub 的函数,它返回一系列书籍的所有出版年份的平均值。函数参数为:avgPub::[(String, String, Int)] -> Int。输入/输出的一个示例是,

> avgPub [("publisher", "book", 1920), ("publisher1", "book1", 1989), ("publisher2", "book2", 1920)]
1943

昨天,我学习了 div、sum 和 map,但我不确定如何将它们结合起来解决这个问题(正如练习所暗示的那样)。我认为要找到 Int 列表的平均值,您需要 list (x:xs) = (sum (x:xs))divlength,但我们是处理的不仅仅是整数,所以这是行不通的。

我无法弄清楚如何将它们结合在一起。

最佳答案

year'::[(String, String, Int)] -> Int 的方向是正确的。您希望以某种方式从所有记录中提取年份字段,以便能够对它们进行平均。

最简单的方法是编写一个函数,该函数采用单个记录并提取年份。 IE。像这样:

year :: (String, String, Int) -> Int
year (_, _, i) = i

(请注意,第一个参数不是列表)

然后您可以创建另一个函数 years,从记录列表中获取 Int 列表:

years :: [(String, String, Int)] -> [Int]
years xs = map year xs

然后您需要做的就是将其与计算 Int 列表平均值的代码放在一起:

average :: [Int] -> Int
average xs = (sum xs) `div` (length xs)

将它们结合在一起:

avgPub books = average (years books)

关于haskell - 列出整数的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27892035/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com