zip 函数还需要第二个列表,它如何仅使用一个参数列表

2023-12-06

我开始学习 Haskell 并发现了一个很好的练习。如下:

grouping: Int -> [Student]->[(Team, Student)]
grouping teamNumber = zip ys
                      where ...

所以,练习要我尽量把剩下的填满。该函数应该执行以下操作: 例子 :grouping 2 ['Mark','Hanna','Robert','Mike','Jimmy'] = [(1,'Mark'),(2,'Hanna'),(1,'Robert'),(2,'Mike'),(1,'Jimmy')].

因此,我们正在组建由两名学生组成的团队,而最后一名学生“吉米”没有队友。

然后,我还查找了预定义函数zip做。它获取两个列表参数,并将列表的每个元素连接到一个元组以构建元组列表。

我的想法: 1)我尝试构建两个函数“grab”和“infinite”。他们看起来如下:

grap :: Int -> [a] -> [a]
grab _ [] = []
grab n (x:xs) = if n <= 0 then [] else x : grab (n-1) xs  

infinite :: Num a => a -> [a]
infinite x = x : infinite(x+1)

所以,他们所做的是:infinite我想创建一个无限列表。和grap应该采取n的要素。例子grap 2 (infinite 1) = [1,2].

我在我的第一行使用这两个where- 履行上面给定功能的声明。 所以我有:

grouping: Int -> [Student]->[(Team, Student)]
grouping teamNumber = zip ys
                      where 
                      xs = grap teamNumber (infinite 1)

So, xs现在是我的第一个清单zip,尤其是整数列表。

但现在我的问题是:zip因为预定义函数还需要第二个列表,尤其是学生姓名列表,但在给定函数中,他们只给 zip 一个参数,即ys作为一个列表。我怎么能理解呢?


`分组 teamNumber` 的类型

仔细看看类型grouping :: Int -> [Student]->[(Team, Student)],以及为其声明而声明的参数

grouping :: Int        -> [Student]->[(Team, Student)]
grouping    teamNumber =  ...

返回类型是什么(等号右侧的类型)如果grouping是否提供了等号左侧列出的所有参数?

Answer

等号右侧的类型是[Student]->[(Team, Student)]。在 Haskell 中,接受两个参数并返回结果的函数可以等效地视为或定义为接受第一个参数并返回 a 的函数(接受第二个参数并返回结果的函数)。所以我们可以说,例如,表达式

grouping 3 :: [Student]->[(Team, Student)]

(grouping 3)是一个函数,它获取学生列表并返回这些学生的列表,标记为 3 组。大概,如果(grouping 3)应用于您示例中的学生列表,我们会

(grouping 3) [   'Mark' ,   'Hanna' ,   'Robert' ,   'Mike' ,   'Jimmy' ] =
             [(1,'Mark'),(2,'Hanna'),(3,'Robert'),(1,'Mike'),(2,'Jimmy')]

`zip ys` 的类型

柯里化与以下类型和表达式有什么关系?

zip :: [a] -> [b] -> [(a, b)]
zip    ys

什么类型的zip ys例如,如果ys :: [Bool]?

这和你的问题有什么关系?

当您将其与类型一起考虑时grouping teamNumber,这如何告诉你什么类型ys需要在你的锻炼中吗?

把它们放在一起

从练习代码(忽略类型和where条款)我们有:

grouping teamNumber = zip ys

只能有两件事=在 Haskell 中,如果它们的类型能够统一。在这种情况下,类型grouping teamNumber必须与类型相统一zip ys.

从第一部分我们知道,grouping teamNumber is [Student]->[(Team,Student)].

从第二部分我们知道zip ys有类型[b] -> [(a, b)], where a是这样一种类型ys有类型[a].

因此,我们知道(~是 Haskell 中的类型相等)

[Student]->[(Team,Student)] ~ [b] -> [(a, b)]

如果我们用以下内容替换类型变量,这些将统一b and a

b ~ Student
a ~ Team

现在,我们知道了类型ys is [a],如果我们进行相同的替换,则为[Team].

因此,如果满足以下条件,类型将是正确的:ys :: [Team].

结论

如果您能提供一个ys :: [Team],您可以生成一个从学生到标记有其团队的学生的函数([Student]->[(Team,Student)])通过传递ys作为第一个参数zip。这样的函数正是grouping当它应用于单个参数时需要返回,teamNumber :: Int.

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

zip 函数还需要第二个列表,它如何仅使用一个参数列表 的相关文章

  • 迭代列表的奇怪速度差异

    我创建了两个重复两个不同值的长列表 在第一个列表中 值交替出现 在第二个列表中 一个值出现在另一个值之前 a1 object object 10 6 a2 a1 2 a1 1 2 然后我迭代它们 不对它们执行任何操作 for in a1 p
  • 使用字符串中的变量名称访问变量值,R

    Intro 一个数据集有大量的age year变量 age 1990 age 1991 etc 我有一个字符串值数组length age years 表示这些变量 使得age years 1 回报 age 1990 etc Need 我想搜
  • 使用for循环时如何获取前一个元素? [复制]

    这个问题在这里已经有答案了 可能的重复 Python 循环内的上一个和下一个值 https stackoverflow com questions 1011938 python previous and next values inside
  • 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
  • .join() 方法到底是做什么的?

    我对 Python 还很陌生 并且完全困惑 join 我读过的是连接字符串的首选方法 I tried strid repr 595 print array array c random sample string ascii letters
  • 当顺序很重要时如何从元组列表中删除重复项

    我看过一些类似的答案 但我找不到针对这种情况的具体内容 我有一个元组列表 5 0 3 1 3 2 5 3 6 4 我想要的是仅当元组的第一个元素先前出现在列表中并且剩余的元组应该具有最小的第二个元素时 才从该列表中删除元组 所以输出应该是这
  • Haskell Data.Decimal 作为 Aeson 类型

    是否可以解析一个数据 十进制 https hackage haskell org package Decimal 0 4 2 docs Data Decimal html使用 Aeson 包从 JSON 获取 假设我有以下 JSON foo
  • 在Python中,如何将矩阵逆时针旋转90度?

    gt gt gt def rotate matrix k List List int For example if I have m 1 2 3 2 3 3 5 4 3 rotate matrix m should give me 3 3
  • 如何打乱列表?

    如何从一组数字 1 2 3 直到我击中x 我的计划是重新调整列表 1 2 3 并把它砍在x chopAt 3 2 3 1 2 3 chopAt 3 2 1 3 2 1 3 chopAt 3 3 1 2 3 chopAt chopAt x y
  • php如何生成动态list()?

    根据我的理解 这就是 list 的工作原理 list A1 A2 A3 array B1 B2 B3 所以在帮助下list 我们可以相应地从数组中分配值 这是我的问题 如何生成动态list 1 基于数据库返回结果 我不确定有多少 但我将其全
  • 使用 pandas 单元格中列表的长度选择行[重复]

    这个问题在这里已经有答案了 我有一张表 df a b c 1 x y x 2 x z c d 3 x t e f g 只是想知道如何使用 c 列的长度选择行 such as df loc len df c gt 1 我知道这是不对的 正确的
  • 迭代打印列表中的每个整数

    假设我有一个整数列表l 1 2 我想打印到stdout Doing print l产生 1 2 假设我想打印不带大括号的列表 map print l产生 No instance for Show IO arising from a use
  • 列表值的意外更改

    这是我的课 class variable object def init self name name alias parents values table name of the variable self name 这是有问题的函数 f
  • RankN多态性和令人发指的克莱斯利之箭

    我不明白为什么 demobind1 的定义会产生一些编译器错误 它看起来像一个愚蠢的翻转 但不知何故 LANGUAGE GADTs LANGUAGE RankNTypes ScopedTypeVariables TypeOperators
  • 如何从链表中删除节点?

    将整数添加到列表中工作正常 但删除和打印时出现问题 我对调试器还不友好 但我发现节点指针 first 有错误 它的值为 17891602 我不知道发生了什么事 include
  • 在活动中嵌入一个大小的ListView - android

    我正在看这个教程 http developer android com resources tutorials views hello listview html http developer android com resources t
  • Haskell:对 Num 类型类的使用感到困惑

    我很困惑为什么这有效 f Num a gt a gt a f x x 42 但这并没有 g Num a gt a gt a g x x 4 2 我本来就明白Num包含实现运算符的所有类型 因此 如果42 is an Int and 4 2
  • 给定一个排序数组,就地删除重复项,使每个元素仅出现一次并返回新长度

    完整的问题 我开始在线学习 python 但对这个标记为简单的问题有疑问 给定一个排序数组 就地删除重复项 使得每个 元素只出现一次并返回新的长度 不分配 另一个数组的额外空间 您必须通过修改输入来完成此操作 数组就地 具有 O 1 额外内
  • 自定义 monad 的 MonadTransControl 实例

    的文档monad control提供有关如何创建实例的示例MonadTransControl using defaultLiftWith and defaultRestoreT 该示例适用于以下情况newtype newtype Count
  • 如何使用foldr为列表创建显示实例?

    我想为我的数据类型 我的列表 编写自己的显示实例 到目前为止 我的方法是有效的 但我总是在末尾有一个逗号 我已经尝试用最后一个元素启动折叠并将其从列表中删除 但它很麻烦而且不起作用 有没有更简单的方法来获得正确的解决方案 实际 1 2 3

随机推荐

  • 使用 AR(1) 项进行 OLS 估计

    由于我无法解释的原因 因为我不能 不是因为我不想 我办公室使用的流程需要在 Eviews 上运行一些回归 Eviews 上使用的方程规范为 dependent variable c independent variable ar 1 此外
  • OpenCover MSBuild 集成 - 未生成结果

    让 OpenCover 在我的机器上工作后 下一步是让它与构建服务器一起工作 我一直在尝试将 OpenCover 与 Bamboo Build Server 上的 MSBuild 集成 我已按如下方式修改了 Build proj 以在构建解
  • Laravel 5 中的加密和解密

    我一直在寻找有关在 Laravel 中加密和解密值的想法 例如 VIN 号 员工 ID 卡号 社会保障号等 最近在 Laravel 网站上发现了这一点 https laravel com docs 5 6 加密 我的问题是 如何在刀片模板上
  • imshow() 将灰色图像显示为白色图像

    我计算了一个值在 0 到 255 之间的图像 当我使用 imageview 时 图像以灰度正确显示 但是当我想保存该图像或用 imshow 显示它时 我有一个白色图像 或者有时到处都有一些黑色像素 而使用 imageview 时 有人能帮我
  • YT 未定义 - 未捕获的 ReferenceError:[youtube api]

    删除了不需要的代码演示 嘿 我正在实现 Youtube Video Player Api 我在控制台中看到某种错误 视频如何完美播放 但我想知道为什么会出现错误 如果我将代码保留在骨架模式之外 就不会出现任何错误 有人可以解释一下吗 Tha
  • 具有自定义列渲染器排序的 Rally 网格

    背景 当我尝试按使用自定义渲染器的列进行排序时 没有任何反应 它将排序从 ASC 更改为 DESC 来回更改 但数据的顺序从未改变 我假设这是因为没有定义如何对我使用自定义渲染器操作的数据进行排序 但我似乎找不到向列添加排序器或排序函数的方
  • Chrome 放弃了 Java 支持

    我在我的应用程序中使用 Java 小程序 今天我惊讶地看到了redirect来自我的页面和来自 java 的下一条消息 In details我读过有关 Chrome 放弃 NPAPI 支持的报道 最近 谷歌修改了他们的计划 现在声明他们计划
  • 有没有可以将数字拼音转换为带有声调标记的拼音的库?

    只是想知道是否有人知道可以将汉语拼音转换为声调的类库 例如 nin2 hao3 ma 到 n n h o ma 它会类似于这个答案 但希望使用 NET 框架 这是我对 Greg Hewgill 的移植蟒蛇算法到 C 到目前为止我还没有遇到任
  • 刚开始学习Java。为什么 main() 位于类内部?

    我正在学习 Java 我注意到main 被放在一个类中 为什么 我不考虑我的main 成为任何对象的成员 所以请告诉我如何解决这个问题 我不考虑我的main 成为任何对象的成员 这不是因为它是一个static方法 它不属于任何对象 而是属于
  • 在法国机器上执行时出现 java.lang.NumberFormatException

    在下面的代码中 在解析值时 有时我会在法国机器上遇到 NumberFormat 异常 double txPower DecimalFormat df new DecimalFormat txPower txPower getDeltaP l
  • 在 Windows 主机上调试 VMWare 中的 Linux 内核

    我正在开发我的第一个内核模块 所以我对此有点陌生 我的模块偶尔会产生恐慌 并且我无法使用 printk 深入了解它 据我所知 我的调试选项是 1 找到生成的OOPS消息并使用ksymoops or 2 尝试使用 kgdb 进行远程调试 我正
  • JOptionPane 每行有多个按钮?

    我将如何展示JOptionPane showinputDialog 与多个JButtons每行 我不是在谈论Yes No Cancel按钮但有多个自定义标签JButtons显示在内容区域JOptionPane showinputDialog
  • UWP:如何获取任务栏高度

    我正在制作一个 UWP 应用程序 我的要求是以编程方式获取任务栏的大小 该应用程序将在不同分辨率的平板电脑上运行 在遵循 stackoverflow 上的许多答案 实际上与隐藏 显示任务栏更相关 之后 我得到了这个 如何获取任务栏的位置和大
  • unordered_map::iterator 从哪里来?

    当我使用std unordered map
  • 获取保存在挂钩函数中的订单项元中的自定义字段值

    我可以在产品页面上添加 验证 显示在购物车和结帐页面上的自定义字段 请有人告诉我如何使用以下命令检索自定义字段值woocommerce order status completed 已完成 hook 我想在确认电子邮件发送给用户后再发送一封
  • 使用 Weblogic 10.3 记录 JPA SQL

    通过查看 Open JPA 网站 我发现我可以使用以下命令记录生成的 SQL
  • 什么是“Microsoft C++ 异常”?

    这主要是出于好奇 但在调试时 我经常看到这样的一行 MyApp exe 中 0x7583812f 处的第一次机会异常 Microsoft C 异常 内存位置 0x039be09c 处的 CTBadSupportFileException 我
  • 将包含毫秒的 CIM_DateTime 解析为 Java 日期

    我正在尝试将从 Windows 管理界面检索到的 DateTime 值转换为 Java 1 7 日期 最终到纪元以来的毫秒数 这格式在这里指定 我试图解析的一个例子是20160513072950 782000 420这是 2016 年 5
  • WPF实时渲染

    我正在设计一款游戏 并考虑使用 WPF 制作基本游戏玩法的简单原型 是否可以在 WPF 中实时渲染基本的 2d 图形 我所说的基本图形是指简单的形状 如直线 圆形等 我所说的 实时 是指根据速度 加速度等参数进行渲染 这些参数根据玩家输入而
  • zip 函数还需要第二个列表,它如何仅使用一个参数列表

    我开始学习 Haskell 并发现了一个很好的练习 如下 grouping Int gt Student gt Team Student grouping teamNumber zip ys where 所以 练习要我尽量把剩下的填满 该函