如何组合相等的序列元素(函数式编程)?

2023-11-29

我想编写一个函数,它接受序列 并返回具有相同元素分组的序列,如 , , >。

我使用的是序列,而不是列表,但有些功能是相似的。我正在考虑使用的一些功能是map、reduce、tabulate、filter、append等。

Reduce 接受一个关联函数并返回由该运算符“减少”的序列。因此,减少 op+ 0 = 6。

我的第一个想法是使用map将序列提升一级。 因此, => ,,,,>。

然后,我考虑使用reduce,在其中创建一个函数,该函数接受像(x,y) 这样的元素对。如果 x == y,那么我返回,否则我什么也不做。但是......这并不完全有效,因为函数在两种情况下都必须返回相同类型的内容。

有人可以给我一些关于正确路径的提示,比如我可以使用哪些高阶函数?我正在使用 SML,但我不会要求任何人给我一个完整的答案,因此任何高级提示将不胜感激(诚实地使用任何功能语言)


我猜想reduce您所指的功能与foldF# 中的函数:

val fold : ('State -> 'Value -> 'State) -> 'State -> 'Value list -> 'State

这需要一个值列表,以及一个初始状态和一个在迭代列表值时转换状态的函数。

您可以一次完成您想做的事情。您需要将一些内容保留在状态中。想象一下你在中间的某个地方1,1,2,2,3(比如说,在第二个2)。现在你需要:

  • 您当前正在收集的价值 - 即2
  • 包含当前收集的值的值列表 - 即[2](首先2从序列)
  • 您之前收集的值列表的列表 - 即[ [1; 1] ].

你将从初始状态开始-1, [], [] (using -1作为一些不会出现在您的输入中的值)。然后,您需要编写根据当前值转换状态的函数。这需要处理几种情况:

  • 当该值与您一直收集的值不同时,您需要将收集的值列表添加到列表列表中(除非它为空)
  • 当值相同时,需要将其添加到现在收集的值列表中并继续

希望这能为您提供足够的信息来弄清楚如何做到这一点,而无需实际透露完整的源代码!

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

如何组合相等的序列元素(函数式编程)? 的相关文章

  • 通用高阶函数

    当我将泛型函数作为本地值传递时 但在作为参数传递时却不能使用具有不同类型参数的泛型函数时 是否有原因 例如 let f id let g x y f x f y g 1 2 工作正常 但如果我尝试将函数作为参数传递 let g f x y
  • 链接“let”语句时使用“and”还是“in”更好?

    我意识到这可能是一个愚蠢的问题 但是 如果我把一堆let不需要需要了解彼此价值观的语句 使用是否更好and or in 例如 以下哪一个更可取 如果有 let a foo and b bar and c baz in etc or let
  • Ruby 反向柯里化:这可能吗?

    关于 Ruby 1 9 x 中的柯里化 我一直在某些地方使用它 并且可以像基本上支持 proc 参数的默认参数一样进行翻译 p proc x y z x y z p curry 1 gt returns a lambda p curry 1
  • F# 获取随机数列表

    我正在尝试用随机数填充列表 但很难获得随机数部分 我现在打印出一个随机数 10 次 我想要的是打印出 10 个不同的随机数 let a new System Random Next 1 1000 let listOfSquares for
  • F# 对于 OO 或命令式来说缺少什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • F# 类型提供程序与 Lisp 宏

    我一直在阅读有关 F 3 0 类型提供程序的内容 例如here http msdn microsoft com en us library hh156509 aspx 并且它们似乎基于一种编译时代码生成 在这方面我想知道它们与 Lisp 宏
  • 该表达式的类型为 int,但此处与 unit 类型一起使用

    我试图在 F 中获得与此 vb net 代码完全相同的 非功能性的 Function FastPow ByVal num As Double ByVal exp As Integer As Double Dim res As Double
  • OCaml 文字负数?

    我在学 这是我觉得奇怪的事情 let test treeways x match x with when x lt 0 gt 1 when x gt 0 gt 1 gt 0 如果我这样称呼它 test threeways 10 我会得到类型
  • 减少/折叠幺半群列表,但减少器返回任一

    我发现自己遇到过几次这样的情况 我有一个减速器 组合 fn 如下所示 def combiner a String b String Either String String a b asRight String 它是一个虚拟实现 但 fn
  • 将属性应用于返回值 - 在 F# 中

    在 C 中 可以将属性应用于方法的返回 return DynamicAttribute public object Xyz return new ExpandoObject 这在 F 中可能吗 背景 我想要一个用 F 编写的库的方法 该方法
  • OCaml 中的不可变变量

    我正在学习 OCaml 我对变量的不变性有点困惑 根据我正在读的书 变量是不可变的 到目前为止一切顺利 但到底为什么我可以这样做 let foo 42 let foo 4242 我缺少什么 我认为最好的解释方法是举个例子 考虑以下代码 在
  • 是否可以只迭代一个流一次并执行 2 个或更多操作?

    给定代码 List
  • 从 F# 调用 Newtonsoft.Json 出现意外结果

    我没有从该 F 代码中获得预期结果 我希望 t 包含调用 JsonSchema Parse json 的结果 但它是空的 我究竟做错了什么 open Newtonsoft Json open Newtonsoft Json Schema l
  • 将“列表”转换为“集合”?

    OCaml 真的没有从列表转换为集合的函数吗 如果是这样的话 是否可以制作一个通用函数list to set 我尝试制作一个多态集 但没有成功 基本问题 列表可以包含任何类型的元素 集合 假设你的意思是Set http caml inria
  • “不等于”的 F# 语法是什么?

    在 C 代码中 它会是这样的 if c 0 some code 那么在 F 中呢 From MSDN 有关 F 算术运算符的页面 http msdn microsoft com en us library dd469493 aspx 看起来
  • std::bind 重载解析

    下面的代码工作正常 include
  • 为什么Racket中foldl的定义方式很奇怪?

    在 Haskell 中 与许多其他函数式语言一样 函数foldl被定义为 例如 foldl 0 1 2 3 4 10 这没关系 因为foldl 0 1 2 3 4 根据定义 0 1 2 3 4 但是 在 球拍 中 foldl 0 1 2 3
  • Haskell 对于 Web 应用程序来说足够成熟吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 数量重新分配逻辑 - 具有外部数据集的 MapGroups

    我正在研究一种复杂的逻辑 需要将数量从一个数据集重新分配到另一个数据集 在例子中我们有Owner and Invoice 我们需要从数量中减去Invoice准确地Owner匹配 在给定汽车的给定邮政编码处 减去的数量需要重新分配回同一辆车出
  • 使用 leftOuterJoin,不需要 .DefaultIfEmpty()

    的文档leftOuterJoin MSDN 上的查询表达式 http msdn microsoft com en us library hh225374 aspx通过样本反复暗示 当使用leftOuterJoin on into 你仍然必须

随机推荐

  • 使用 jni 库构建 AOSP 应用程序

    我正在尝试在 AOSP 内构建 Android 应用程序 我已经定义了Android bp文件如下 cc prebuilt library shared name libPrintString target android arm srcs
  • 获取文件的绝对路径

    如何在 Unix 上将相对路径转换为 C 中的绝对路径 有没有方便的系统功能 在 Windows 上有一个GetFullPathName函数可以完成这项工作 但我在 Unix 上没有找到类似的东西 Use 真实路径 The realpath
  • “在此上下文中需要子类型标记”到底是什么?

    I get Subtype mark required in this context at 子类型掩码到底是什么 为什么它在这里抱怨 main adb Open Route Route 1 3 others gt new Location
  • buildTypes 无法应用于 groovy.lang.Closure

    我在我的项目 gradle 文件中收到此警告 警告 16 5 buildTypes 无法应用于 groovy lang Closure 我的 buildTypes 部分是 buildTypes debug debuggable true r
  • ffmpeg 在单个命令中剪切视频并刻录字幕

    我想从视频中剪下一段并刻录该段的字幕 我可以分三步完成 剪切视频 ffmpeg ss 25 00 to 26 00 i vid mp4 c copy out mp4 剪掉副标题 ffmpeg i sub srt ss 25 00 to 26
  • 如何隐藏实际的下载文件夹位置

    我心里有一个问题 如何mod rewrite增加安全性 我有一个 php 文件 它在线显示 pdf 文件 例如www exaple com id 234它会查询数据库并获取实际的文件夹位置 实际文件夹位置是uploads 我正在使用类似的东
  • 在新的 Android 模拟器上禁用首次运行的欢迎程序

    我正在编写一个测试 需要直接从启动器启动应用程序 因为我无法通过意图启动来正确模拟它 问题是 当我在新的模拟器上运行测试时 我使用的是 Travis CI 但它可以在我的家用 PC 上轻松重现 模拟器会以 首次运行 问候语覆盖层开始 这会阻
  • Kafka 生产者 - 如何在不停机的情况下更改主题并保留消息顺序?

    这个问题是关于架构和kafka主题迁移的 原来的问题 没有向后兼容性的架构演变 https docs confluence io current schema registry avro html 我请求社区给我建议或分享文章 我可以从中获
  • 如何在 Ivy 中整合版本管理,就像 Maven 中的parent-pom 一样?

    我们有很多项目需要使用通用版本号 使用 Ant Ivy 执行此操作的最佳实践是什么 您是否只是从 Ant 继承了一堆包含版本号的属性 还是有像 Maven 那样更正式的机制 正如你所指出的 我认为这是新的问题extends功能被设计来解决
  • Mongodb 查询特定的月份|年份而不是日期

    如何查询 mongodb 中的特定月份 而不是日期范围 我需要月份来列出当月的客户生日列表 在 SQL 中会是这样的 SELECT FROM customer WHERE MONTH bday 09 现在我需要在 mongodb 中翻译它
  • 从 Play 商店 xamarin 获取最新的应用程序版本

    如何从 Google Play 商店获取最新的 Android 应用程序版本 之前曾使用下面的代码来做到这一点 using var webClient new System Net WebClient var searchString it
  • eclipse插件代码在指定位置创建IProject

    IProgressMonitor progressMonitor new NullProgressMonitor IWorkspaceRoot root ResourcesPlugin getWorkspace getRoot IProje
  • JButton 的不透明度/半透明度?

    我有如下简单的 GUI 代码 我想在其中制作JButton一个是半透明的 这样后面的图像JButton是可见的 package dealORnodeal import java awt BorderLayout import java aw
  • 如何选择并删除每第三列

    我有一组数据 其中每第三列都是相同的 我只想保留第一列 其他相同的列必须删除 起初我尝试了这段代码 但它删除了错误的列 因为在每个循环中其他列的位置都被改变了 Sub DeleteMultipleColumns Dim i As Integ
  • Rails 模型字段未更新到数据库

    使用型号 class Car lt ActiveRecord Base attr accessor model edition attr accessible model edition has many wheels end class
  • Google Actions 返回抱歉,尚不支持电源控制

    我通过扩展助手来实现我的设备 如中所述指示 我可以看到我的设备注册了以下特征 googlesamples assistant devicetool 列表 model Device Model Id assistant 19etc Proje
  • .NET:如何获取空对象的类型?

    我有一个带有 out 参数的方法 尝试进行类型转换 基本上 public void GetParameterValue out object destination object paramVal I want to return this
  • Android 地图、标记和内存泄漏

    我正在阅读 android 文档http developer android com reference com google android gms maps MapFragment html我看到了这句话 从 GoogleMap 获取的
  • R Shiny 中的反应式数据框

    我有一个由多个类别和月份组成的数据框 每行是参与者的 1 次交互 因此我想通过热图按月份和不同类别显示他们全年的交互计数 总共 490 万行 这意味着全年总共有 490 万次交互 我尝试使用输入来指示列名称 并尝试被动地更改 X 轴 但它似
  • 如何组合相等的序列元素(函数式编程)?

    我想编写一个函数 它接受序列 并返回具有相同元素分组的序列 如 gt 我使用的是序列 而不是列表 但有些功能是相似的 我正在考虑使用的一些功能是map reduce tabulate filter append等 Reduce 接受一个关联