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 函数还需要第二个列表,它如何仅使用一个参数列表 的相关文章

  • 交替附加两个列表中的元素

    我有三个包含元素的列表 a 0 1 2 3 b 5 6 7 8 c 我想附加元素a and b into c to get c 0 1 5 6 2 3 7 8 基本做法 gt gt gt a 0 1 2 3 gt gt gt b 5 6 7
  • 'lens' 的阴谋集团依赖性解析失败

    我刚刚做了一个阴谋更新并尝试从 hackage 安装 lens 这给了我以下错误 cabal install j lens Resolving dependencies Configuring dlist 0 7 0 1
  • “反向”使用 Maybe Monad

    假设我有很多功能 f a gt Maybe a g a gt Maybe a h a gt Maybe a 我想按以下方式组合它们 如果 f 返回 Nothing 则计算 g 如果 g 返回 Nothing 则计算 h 如果其中任何一个计算
  • functools.partial 想要使用位置参数作为关键字参数

    所以我试图理解partial import functools def f x y print x y g0 functools partial f 3 g0 1 4 Works as expected In g1 functools pa
  • 对自身内部列表的递归引用[重复]

    这个问题在这里已经有答案了 所以我在 python 中遇到了一些非常奇怪的东西 我尝试添加对列表本身的引用 该代码可能有助于比我能表达的更好地展示我所说的内容 我正在使用 IDLE 编辑器 交互模式 gt gt gt l 1 2 3 gt
  • 将 Either 列表转换为其中包含列表的 Either 列表

    我是 Haskell 的初学者 我正在编写一些使用 Haskell 的代码Either https hackage haskell org package base 4 9 0 0 docs Data Either html用于错误处理 E
  • Haskell 测量函数性能

    在 Haskell 中 我如何 简单地 测量函数的性能 例如 运行需要多长时间 或者需要多少内存 我知道分析 但是 是否有一种更简单的方法不需要我对代码进行太多更改 测量运行需要多长时间以及需要多少内存是两个独立的问题 即 基准测试和分析
  • 将2个暗淡数组“列表列表”输出到python中的文本文件

    简单的问题 我正在创建一个两个暗淡的数组 ddist 0 d for in 0 d 在下面的代码中使用列表 它使用 gis 数据输出距离 我只是想要一种简单的方法来获取数组 列表的结果并将其输出到保持相同的 N N 结构的文本文件 我过去曾
  • 将由空格分隔的整数字符串更改为 int 列表[重复]

    这个问题在这里已经有答案了 我该如何做类似的东西 x 1 2 3 45 87 65 6 8 gt gt gt foo x 1 2 3 45 87 65 6 8 我完全陷入困境 如果我按索引执行此操作 那么超过 1 位数字的数字将被分解 请帮
  • 如何使用流从两个列表或数组乘法中查找元素对

    我有两个数字列表 我想找到所有可能的数字对 例如 给定列表 1 2 3 and 3 4 结果应该是 1 3 1 4 2 3 2 4 3 3 3 4 我知道我可以使用for loop但有没有更简洁的方法来使用Java 8 流 我尝试了以下操作
  • C++ std::list:迭代时擦除/删除元素[重复]

    这个问题在这里已经有答案了 可能的重复 您可以在迭代 std list 时从其中删除元素吗 https stackoverflow com questions 596162 can you remove elements from a st
  • Python列表内存存储[重复]

    这个问题在这里已经有答案了 据我了解 Python 列表本质上是 C 数组 它们分配特定的顺序内存块 但是 这些内存块实际上存储列表中的数据还是它们只是指向内存中存储实际数据的另一个位置 它可能取决于列表中存储的对象的大小吗 因为您可以轻松
  • 了解 Scala 中的中缀方法调用和缺点运算符(::)

    我对 Scala 编程语言相当陌生 当我遵循以下网站的讲义时 我正在尝试一些萦绕在我脑海中的东西 here http horstmann com sjsu cs152 04 closures1 html 我想我无法真正理解 cons 运算符
  • 反应性香蕉时间延迟

    我已经查阅了文档反应香蕉 http hackage haskell org package reactive banana 而且我找不到指定明确时间延迟的方法 举例来说 我想采取Event t a并将其所有发生的事件移至未来 1 秒 或获取
  • 列表值意外变化[重复]

    这个问题在这里已经有答案了 为什么是这个列表r即使我只是想更改列表 也会被更改v 即使它们不指向相同的内存位置 r v list r 2 2 1 2 8 3 10 2 1 8 4 2 4 6 4 for c a in enumerate r
  • 解析 PHOAS 表达式

    我想我理解 PHOAS 参数化高阶抽象语法 我明白了如何漂亮地打印一个表达式 参见http www reddit com r haskell comments 1mo59h phoas for free by edward kmett cc
  • 有没有办法在 Emacs 中使用 Djinn 自动生成 Haskell 代码?

    标题几乎说明了一切 我正在寻找这样的东西 f Int gt Bool gt Int f body Djinn 可以使用定理证明来通过证明该类型存在来生成此类函数的代码 我想知道 是否有现有的方法可以从 Emacs 中获取此功能 因此 我不需
  • 嵌套在其他 monad 中的 IO 操作未执行

    我有一个 foobar IO ParseResult String String ParseResult 是一个在这里定义的 monad https hackage haskell org package haskell src exts
  • 如何处理在组合下发生变化的类型?

    我最近读了一篇非常有趣的论文单调性类型 https infoscience epfl ch record 231867 files monotonicity types pdf其中描述了一种新的 HM 语言 该语言可以跟踪操作之间的单调性
  • 将其元素添加到另一个列表后清除列表

    我正在做一个程序 它获取更多句子作为参数 我制作了 2 个列表 一个称为 propozitie 其中包含每个句子 另一个称为 propozitii 其中包含所有句子 问题是 当我在遇到 后清除 propozitie 列表时 它也会清除 pr

随机推荐

  • 使用 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 所以 练习要我尽量把剩下的填满 该函