输出自定义数据类型列表的内容

2023-12-09

我有一个自定义数据类型Movie = String Int [(String,Int)](电影名称年份 [(粉丝,评分)] 并想做几件事:

首先,我想创建一个函数,对元组列表中的整数进行平均并仅输出该数字。到目前为止我有这个不完整的功能:

avgRating :: [DataType] -> Int avgRating [(Movie a b [(fan,rating)])] = sumRatings / (length [<mylist>])

这里我需要一个函数 sumRatings 来递归列表并对所有评级求和,但我不知道从哪里开始。

我在这里遇到的另一个问题是我不确定该把什么放在哪里<mylist>就像我通常会给列表一个变量名称,然后在那里使用它一样,但由于我已将列表拆分以定义其他变量,所以我无法命名它。

我希望这是有道理的,谢谢。


我猜你的数据结构定义为

data Movie = Movie String Int [(String, Int)]

虽然这可行,但当您有这么多字段时,使用起来可能会有点麻烦。相反,您可以利用类型别名并将语法记录为

type Name = String
type Year = Int
type Rating = Int

data Movie = Movie
    { mName :: Name
    , mYear :: Year
    , mRatings :: [(Name, Rating)]
    } deriving (Eq, Show)

现在事情变得更加明确并且更容易使用。这mName, mYear, and mRatings函数将需要一个Movie并从中返回相应的字段。你的Movie构造函数仍然以相同的方式工作,因此它不会破坏现有代码。

要计算评分的平均值,您确实需要一个函数来提取电影的所有评分并将它们聚合到一个列表中:

ratings :: Movie -> [Rating]
ratings mov = map snd $ mRatings mov

那么你只需要一个average功能。这会有点不同,因为你无法计算平均值Int直接,你必须转换为浮点类型:

average :: [Rating] -> Float   -- Double precision isn't really needed here
average rs = fromIntegral (sum rs) / fromIntegral (length rs)

The fromIntegral函数转换一个Int to a Float(实际的类型签名更通用一些)。由于两者sum of Ints is an Intlength列表的永远是一个Int,您需要将两者都转换。

现在您可以将它们组合成一个函数:

movieAvgRating :: Movie -> Float
movieAvgRating = average . ratings

现在,如果您需要计算几部电影的平均评分,您可以应用ratings对于每个人,将它们汇总到一个评级列表中,然后调用average关于这一点。我建议看看concatMap功能。你会想要创建一个像这样的函数

moviesAvgRating :: [Movie] -> Float
moviesAvgRating movs = average $ ???
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

输出自定义数据类型列表的内容 的相关文章

  • 导入 Haskell 模块

    我是哈斯克尔的新手 为什么当我尝试使用时Days from Data Time我收到此错误 Could not find module Data Time It is a member of the hidden package time
  • 这个记忆的斐波那契函数是如何工作的?

    在我正在做的函数式编程课程的当前练习作业中 我们必须制作给定函数的记忆版本 为了解释记忆化 给出以下示例 fiblist fibm x x lt 0 fibm 0 0 fibm 1 1 fibm n fiblist n 1 fiblist
  • Haskell 类型系统的细微差别

    我一直在深入了解 haskell 类型系统的本质 并试图了解类型类的要点 我已经学到了很多东西 但我在下面的代码片段上遇到了困难 使用这些类和实例定义 class Show a gt C a where f Int gt a instanc
  • Haskell scala 互操作性

    我是 Scala 初学者 来自面向对象范式 在了解 Scala 的函数式编程部分时 我被引导到 Haskell 纯函数式编程语言 探索 SO 问题答案 我发现 Java Haskell 具有互操作性 我很想知道 Scala Haskell
  • 我应该在 Turtle 或 Foldl 包中使用折叠吗?

    我在使用 Turtle 时遇到了一些困难 直到盯着难以理解的错误消息几分钟后才意识到我使用了错误的fold功能 https hackage haskell org package turtle 1 5 8 docs Turtle Shell
  • Haskell:无法预期类型“Integer”与实际类型“Int”

    我已经盯着这段代码有一段时间了 但我无法理解该错误消息 divisors Integer gt Integer divisors n t t lt 1 n mod n t 0 length a gt Integer length 0 len
  • 纯函数怎么能做IO呢?

    我最近了解到莫纳德随机数 http hackage haskell org package MonadRandom 0 1 13 docs Control Monad Random Class html t 3aMonadRandom图书馆
  • 将两个 Int 值相除以获得 Float 的正确方法是什么?

    我想分两份IntHaskell 中的值并获得结果Float 我尝试这样做 foo Int gt Int gt Float foo a b fromRational a b 但 GHC 版本 6 12 1 告诉我 无法将预期类型 Intege
  • “Eta减少”并不总是在Haskell中举行?

    我发现我可以说 LANGUAGE RankNTypes f1 forall b b gt b gt forall c c gt c f1 f id f HLint 告诉我我可以在这里做 Eta 减少 但是 f2 forall b b gt
  • 如何在 Haskell 中安装库?

    我尝试使用控制 Monad Extra andM https hackage haskell org package extra 1 7 10 docs Control Monad Extra html import Control Mon
  • Haskell 中的尾递归字符串分割

    我正在考虑分割字符串的问题s在一个字符处c 这表示为 break c s 其中 Haskell 库定义break c 足够接近 br br s h t if c h then s else let h t br t in h h t 假设我
  • Traversable 类型类的用途

    有人可以向我解释一下类型类的目的是什么吗Traversable 类型类定义是 class Functor t Foldable t gt Traversable t gt where So Traversable is a Functor
  • Haskell:Data.Numbers.Primes 库在哪里?

    我尝试导入 Data Numbers Primes import Data Numbers Primes 伦哈斯克尔给了我 5 hs 1 8 Could not find module Data Numbers Primes Use v t
  • QuickCheck是否可以生成任意函数

    我试图为身份编写一个 QuickCheck 测试 f y f y 我最初的计划是编写一个返回函数和整数的任意生成器 具有签名Gen Int gt Int Int 并在prop DollerDoesNothing使用 不使用测试该功能应用程序
  • 如何在haskell中获取变量名称

    我来到 haskell 时有一些 c 背景知识 想知道是否有类似的 define print a printf s d n a a int a 5 print a 应该打印 a 5 这是 augustss 提到的 TH 解决方案 LANGU
  • : 中缀运算符在 Haskell 中的作用是什么?

    我正在阅读Haskell 简要介绍 http www haskell org tutorial index html 这不是那么温和 并且它反复使用 操作符而不直接解释它的作用 那么 它到底有什么作用呢 是 前置 运算符 x xs 返回一个
  • Haskell - lambda 表达式

    我试图了解什么是有用的以及如何在 Haskell 中实际使用 lambda 表达式 我不太明白使用 lambda 表达式相对于定义函数的约定方式有何优势 例如 我通常会执行以下操作 let add x y x y 我可以简单地打电话 add
  • 在 Haskell 中合并两个列表

    无法弄清楚如何合并两个列表通过以下方式在哈斯克尔 INPUT 1 2 3 4 5 11 12 13 14 OUTPUT 1 11 2 12 3 13 4 14 5 我想提出一个更懒的合并版本 merge ys ys merge x xs y
  • Haskell:不在范围内:数据构造函数

    今天开始在学校学习 haskell 我遇到了函数问题 我不明白为什么它不在范围内 代码如下 ff Char gt Char gt Char ff A B x 0 y 1 x lt A y lt B x 1 y 0 和错误 md31 hs 2
  • 如何在Haskell中实现词法分析器和解析器

    我在这里得到了这段代码 它是用Haskell结构的命令式编程语言编写的程序 所以问题是 我如何为这种语言实现词法分析器和解析器 该程序被定义为一系列语句有 6 种类型 goto write stop if goto 和 int int n

随机推荐

  • 为什么Visual C++中栈地址低于堆地址?

    众所周知 栈地址高于堆地址进程地址空间 但是当我在VS2010中编写程序验证时 遇到了一些麻烦 栈的地址低于堆 甚至低于Data Segment 程序如下 include stdafx h include malloc h static i
  • scipy.minimize——获取成本函数与迭代?

    有没有办法使用 scipy minimize 在每次迭代的基础上访问成本函数 而不使用回调并重新执行成本函数 options disp似乎打算这样做 但只会导致优化器打印终止消息 将其打印到标准输出并使用就可以了contextlib red
  • R phylo对象:如何连接节点标签和节点编号

    R 中的 phylo 对象可以具有内部节点标签 phylo obj node label 但许多 R 函数使用节点编号而不是节点标签 甚至 phylo 对象本身也使用节点号来描述边 phylo obj edge 并且似乎没有内部节点标签到这
  • 使用 terminfo 仅重置前景色

    通过使用 ANSI 序列Esc 39m在终端中 可以清除前景色而不改变其他属性 如粗体 下划线或背景颜色 例如 echo e e 31 1mRed and bold e 39m Bold only 我想从 terminfo 功能中检索此序列
  • 将 JSON 转换为 Parquet

    我有一些 JSON 格式的 TB 日志数据 我想将它们转换为 Parquet 格式 以便在分析阶段获得更好的性能 我已经成功地通过编写一个mapreduce java作业来做到这一点 该作业使用镶木地板先生 and 镶木地板阿夫罗 我唯一不
  • 在圆形路径上制作圆圈动画

    我在屏幕中央有一个物体 图像 现在我想为这个对象周围的一些圆圈设置动画 实现该任务的最佳想法是什么 我应该使用任何专用的JS动画库 您可以使用一些简单的三角函数 如下所示 在线演示在这里 function loop calc x and y
  • 如何用C++从pgm文件中读取数据

    到目前为止 我可以读取每一行并将其打印到控制台 void readFile string line ifstream myfile example1 pgm if myfile is open while myfile good getli
  • 根据子节点值对父节点 XML 进行排序

    我有以下 XML
  • VB.NET 过滤 ListItems 问题

    我正在尝试根据字符串的存在来过滤列表框 基本上 如果有一个 ListItem 不包含该字符串 那么我想删除所有包含该字符串的 ListItem 这是我尝试过的 Dim Item As ListItem For Each Item In Ct
  • 删除与小于指定大小的组对应的行

    我有一个DataFrame共 100 个答案questions id and 50 user id的 每行代表特定用户的一个问题 桌子看起来像这样 user id question id timetaken answer 1 answer
  • VB Gridview 选择错误的行进行编辑

    您好 我有一个搜索框 当我搜索记录时 记录会显示出来 但是一旦我单击网格视图上的编辑 页面就会进行回发 并且所有记录都会显示备份 并选择第一条记录进行编辑 如何禁用此回发或使其在单击 编辑所有记录 时不再显示 VB CodeBehind P
  • 如果属性数量大于n,则返回Neo4j中的路径

    所以我有一个如下所示的图形数据库 唯一真正有趣的是SomeProperty可以是 是 或 否 在顶行中 3 个节点中有 1 个此属性为 是 在底行 所有 3 个节点的该属性均为 是 如何通过提出以下问题来编写仅返回底行的 Cypher 查询
  • 更改 JavaScript 对象内的对象属性值会影响其他对象

    我想更改对象内部对象的属性 但是 当我这样做时 使用相同原型创建的其他对象属性也发生了变化 代码如下 var a x y foo var b Object create a var c Object create a console log
  • 返回排序数组中每个数字的最后一次相遇的函数

    我编写了一个函数 返回从 0 到 9 的每个数字的第一次相遇 array 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 def lower a val left right if left right re
  • 关闭模态 ViewController 会在 iphone 周围移动主视图按钮

    我在用着presentModalViewController and dismissModalViewController动画设置为YES在这两种情况下 这很好用 模态视图关闭后 主视图上的所有内容都向下移动了 20 像素 有人知道为什么会
  • 使用 mod_rewrite 将 .html 重写为 .php

    我有一个重写条件和规则 RewriteCond DOCUMENT ROOT 0 f RewriteRule index php L 我需要更换 html with php in DOCUMENT ROOT 0 原因是 我正在重写我的网址 h
  • 如何解决布局中更多数字的 Editext 问题并从中获取值?

    看这张图 我正在android中设计一个数独 已经完成了这样的布局 所以81 Editext就在那里 我想获取 Editext 中的所有值 因此很难在活动中声明和管理 81 个视图 您能建议我一种有效处理我的问题的方法吗 动态创建编辑文本
  • 如何使用 JAXB 忽略绑定到 XML 的字段

    我有一个简单的课程 如下所示 import nl hu pf coproco model Observeable XmlRootElement name Purpose XmlAccessorType XmlAccessType FIELD
  • Windows 上安装 Network-2.4.2.2 错误

    当尝试在 Cabal 沙箱 1 18 内的 Windows Server 2008 上安装网络包 cabal 安装网络 时 出现以下错误 C Users user Project gt cabal install network prefi
  • 输出自定义数据类型列表的内容

    我有一个自定义数据类型Movie String Int String Int 电影名称年份 粉丝 评分 并想做几件事 首先 我想创建一个函数 对元组列表中的整数进行平均并仅输出该数字 到目前为止我有这个不完整的功能 avgRating Da