Haskell:集合上的递归函数

2024-04-11

我是 Haskell 的新手,我正在尝试编写一个(有点)基本的递归函数来生成集合的分区。我正在引用这个维基页面(https://en.wikipedia.org/wiki/Partition_of_a_set https://en.wikipedia.org/wiki/Partition_of_a_set)作为我对集合分区的定义。

我目前有一个函数可以生成大部分(但不是全部)分区:

separate :: [a] -> [[[a]]]
separate [] = [[]]
separate (b:bs) = [[b]:s | s <- separate bs] ++ [(b:qs):qss | (qs:qss) <- separate bs]

>separate [1,2,3]
[[[1],[2],[3]],[[1],[2,3]],[[1,2],[3]],[[1,2,3]]]

正如你所看到的,它缺少[[1,3],[2]]变体。

我想知道是否可以轻松修改此函数以满足我的要求,或者是否需要创建一个全新的函数。谢谢。


问题在于[(b:qs):qss | (qs:qss) <- separate bs],你只需前置b to the first每个的子集bs分区。你想把它放在前面every subset.

separate (b:bs) = [[b]:s | s <- separate bs]
               ++ (singleModifies (b:) =<< separate bs)

-- | All possibilities of applying a function to exactly one element in the list.
singleModifies :: (a->a) -> [a] -> [[a]]
singleModifies _ [] = []
singleModifies f (x:xs) = (f x:xs) : map (x:) (singleModifies f xs) 

如果您不明白什么=<< http://hackage.haskell.org/packages/archive/base/latest/doc/html/Prelude.html#v:-62--62--61-运算符的作用是:它“展平”列表的嵌套。separate bs已经生成分区列表;对于每一个,我们都会得到另一个列表singleModifies,但最终我们对哪个列表来自哪里不感兴趣,所以我们只是join http://hackage.haskell.org/packages/archive/base/latest/doc/html/Control-Monad.html#v:join (aka concat http://hackage.haskell.org/packages/archive/base/latest/doc/html/Prelude.html#v:concat)他们在一起。另一种写法是

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

Haskell:集合上的递归函数 的相关文章

  • 有没有办法从 IO monad 中解开类型?

    我有这个非常简单的功能 import qualified Data ByteString Lazy as B getJson IO B ByteString getJson B readFile jsonFile readJFile IO
  • 在 Haskell 中编写 Web 应用程序的最简单方法是什么? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想在我的项目中更多地使用 Haskell 并且我认为如果我可以开始将它用于 Web 应用程序 这将真正
  • 使用 Template Haskell 生成函数

    是否可以使用 Template Haskell 定义函数 例如 convertStringToValue String gt Int convertStringToValue three 3 convertStringToValue fou
  • Foldl 是否比其严格的表亲 Foldl' 更好?

    Haskell 有两个列表左折叠函数 foldl 以及 严格 版本 foldl 不严格的问题foldl是它建造了一座重击塔 foldl 0 1 5 gt 0 1 2 3 4 5 gt 15 这会浪费内存 并且如果列表中的项太多 可能会导致堆
  • 在 Haskell/Yampa 和 HOOD 中调试游戏对象的输出

    我一直坚持使用 Haskell Yampa Arrows with HOOD 为我的游戏对象生成调试输出 我的引擎基本上运行一系列游戏对象 这些对象产生输出状态 线 圆 然后进行渲染 data Output Circle Position2
  • 如何在 Windows 7 中配置 cabal?

    我已经在Windows 7中安装了Haskell Platform 2012 我在控制台中编写cabal update我收到消息说有新版本的阴谋集团 我写的cabal install cabal install 安装完成后 它告诉我 cab
  • 有可能吗?:行为 t [行为 t a] -> 行为 t [a]

    有没有办法有一个Behavior t a 其中 a 在时间 t 的值是 a 中包含的值Behavior t Behavior t a 在时间 t 即 具有以下类型的函数 Behavior t Behavior t a gt Behavior
  • 使用通用元组函数一次进行多次折叠

    如何编写一个接受类型函数元组的函数ai gt b gt ai并返回一个函数 该函数接受类型元素的元组ai 类型的一个元素b 并将每个元素组合成一个新的元组ai 那是签名应该是这样的 f a1 gt b gt a1 a2 gt b gt a2
  • Haskell 中美元符号 ($) 和 id 函数之间有关系吗?

    这几天我正在读一篇评论莫纳德挑战 http mightybyte github io monad challenges 我强烈推荐给像我这样的 Haskell 初学者 我最终得到了这个线程 https news ycombinator co
  • Haskell:找不到模块“Data.List.Split”

    我正在尝试在 Haskell 中拆分列表 据我所知 最简单的方法是splitOn 但是这个函数需要Data List Split 所以我尝试运行import Data List Split在前奏曲中 但是 我收到以下错误 Could not
  • 为什么 Haskell 中有协函子和逆变函子的区别,而范畴论却没有区别?

    这个答案是从范畴论的角度来看的 https math stackexchange com a 661989 72174包括以下语句 事实是 协函子和逆变函子之间没有真正的区别 因为每个函子只是一个协变函子 More in details a
  • Haskell 中的前提条件检查有哪些选项

    这是一个简单的问题 我认为答案很复杂 一个非常常见的编程问题是函数返回某些内容 或者前置条件检查失败 在Java中 我会使用一些抛出异常的断言函数IllegalArgumentException在方法的开头 如下所示 method body
  • 如何让 Show 显示函数名称?

    作为一个让我熟悉 Haskell 的简单练习 在 Youtube 上闲逛并偶然进入美国倒计时游戏节目之后 我想为数字游戏制作一个求解器 你得到 6 个数字 需要将它们与 为了得到给定的结果 到目前为止我所得到的是非常脑死亡的 let ope
  • 为什么 Parsec 的 sepBy 停止并且不解析所有元素?

    我正在尝试解析一些逗号分隔的字符串 该字符串可能包含也可能不包含具有图像尺寸的字符串 例如 hello world 300x300 good bye world 我写了下面的小程序 import Text Parsec import qua
  • 这个记忆的斐波那契函数是如何工作的?

    在我正在做的函数式编程课程的当前练习作业中 我们必须制作给定函数的记忆版本 为了解释记忆化 给出以下示例 fiblist fibm x x lt 0 fibm 0 0 fibm 1 1 fibm n fiblist n 1 fiblist
  • Haskell 中的 print 是纯函数吗?

    Is print在 Haskell 中是纯函数 为什么或者为什么不 我认为不是 因为它并不总是返回与纯函数应返回的值相同的值 类型的值IO Int并不是真正的Int 它更像是一张纸 上面写着 嘿 Haskell 运行时 请生成一个Int如此
  • 以下两个 lambda 函数的空间复杂度

    我正在阅读以下内容 https en wikibooks org wiki Haskell Graph reduction https en wikibooks org wiki Haskell Graph reduction 其内容如下
  • Haskell 中列表列表的笛卡尔积

    给定一个长度列表的列表x所有子列表的长度都相同y 输出y x长度列表x包含每个子列表中的一项 例子 x 3 y 2 1 2 3 4 5 6 Output 2 3 8不同的输出 1 3 5 1 4 5 1 3 6 1 4 6 2 3 5 2
  • Haskell 中的中缀运算符优先级

    对于以下 Haskell 表达式 返回 a gt gt f 应该读作 返回a gt gt f or 返回 a gt gt f 这里的相关规则是什么 规则始终是函数应用程序的优先级高于任何运算符 因此 return a gt gt f 被解析
  • Haskell 入门

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 几天来 我一直试图理解 Haskell 中的函数式编程范例 我通过阅读教程和观看截屏视频

随机推荐

  • 返回用于在 using C# 中使用的变量

    我返回在 using 语句内的 using 语句中创建的变量 听起来很有趣 public DataTable foo using DataTable properties new DataTable do something return
  • 如何在 MVC3 中使用 ViewBag 更改或刷新数据

    我想使用 ViewBag 刷新视图中的数据 是否有可能或者我可以使用其他技术 这是我的示例代码 在我的视图页面中 家庭详情 ViewBag Details 0 Name 在我的控制器中 public ActionResult FamilyD
  • 使用命名范围依赖于下拉列表值的文本框值的 Excel VBA 代码

    我拥有的 我有一个 Excel VBA 自定义用户表单 该表单包含一个下拉列表 行业类别 和文本框 对应行业规范者 对于每个行业类别有一个行业规范者 该类别的缩写版本 The 行业类别 and 行业规范者将始终位于同一行 下拉列表由单元格名
  • iPhone - 如何在按下按钮时制作动画?

    有没有办法在点击 iPhone 按钮时制作自定义动画 我想要类似 App Store 按钮的东西 它会显示价格 然后当您单击它时 它会改变颜色并且文本会更改为 立即购买 然后当您再次单击它时 它会完成购买 UIViewAnimationTr
  • 如何从 java 类(在 Lucee 中)中的方法返回 Coldfusion 结构?

    我正在编写一个java类 并且想从方法返回一个coldfusion结构 结构扩展了映射和其他东西 我不是 Java 程序员 所以我不知道如何解决这个问题 这是 lucee java 文档 http javadoc lucee org 当我尝
  • 如何使用Java将生成的PDF文件保存到MySQL数据库?

    我有一个 Java 类 它使用以下命令生成 PDF 文件iText https itextpdf com en图书馆 现在根据我的需要 我必须将生成的 PDF 文件保存到 MySQL 数据库表中 但我不知道该怎么做 我的担忧是 what d
  • Flutter 中的 Widgets 库错误捕获异常

    我在 Flutter 中有这个应用程序 它有两个类来生成笔记列表 这是主类 MyApp 类 import package flutter cupertino dart import package flutter material dart
  • 使用 jQuery.load('url.html') 确定插入图像后何时加载图像

    我目前有与此类似的东西 它在目标页面上加载一个包含图像的 div a galleryNext click function chnage the image to loading info html LOADING currentGal l
  • SQL Server dbo.sysdiagrams 是用户表或系统表

    当在简单数据库中使用数据库图时 SQL Server 在以下位置创建一个 dbo sysdiagrams 表 Table Systam Tables节点 在 Microsoft Management Studio Object Explor
  • 使用自定义颜色代码设置面板背景

    在 WPF 中 我可以使用以下代码设置堆栈面板的背景 stackPanelFlasher Background Brushes Aqua 例如 如何将颜色设置为十六进制颜色代码 C7DFFC BrushConverter bc new Br
  • 延迟加载插件 (jQuery)

    a lightbox hover function if jQuery lightbox required otherwise lightbox js will be loaded on hover each time a lightbox
  • 我的 CryptoJS 加密/解密不起作用

    我有一个 JSON 数组数组 我尝试使用 CryptoJS 对其值进行加密 然后打印以在另一个文件中使用 其中这些值应使用用户给定的密码进行解密 但我做错了什么 在解密 URL 时收到 未捕获错误 格式错误的 UTF 8 数据 加密 js
  • 将时间列拆分为开始时间/结束时间列

    我有一张表格 其中包含有关他们全天所做工作的信息 我需要获取每个任务的开始时间 结束时间 目前 我能够提取每个任务的时间戳 但我希望创建 开始时间 和 结束时间 列 开始时间是前一行的时间戳 结束时间是当前行的时间戳 有什么简单的方法可以做
  • iOS - WebView 和字符串

    我有一个名为 htmlString 的字符串 其中包含一些 html 格式的信息 我需要将这些信息放入加载整个 html 字符串 包含颜色和字体 的 webView 中 我需要知道弦的高度 我能怎么做 你想做类似的事情 webView lo
  • 检查表达式树中的类型转换?

    我正在使用 Expression 创建一些动态生成的代码 我的解决方案有效 但有一个功能除外 我想要进行检查类型转换 如果转换失败 则会抛出 TypeCastException 我找到了 Expression TypeAs 它执行类型转换
  • 将 iOS 9 Today 扩展转换为 iOS 10 的尺寸问题

    晚上好 我在理解今天的扩展时遇到了很大的问题 我读过很多教程和介绍 但没有任何帮助我理解这个问题 在 iOS 9 上 该扩展可以正常工作 在 iOS 10 上则不行 我的大问题是 iOS 10 中小部件的自动调整大小 在 iOS 9 上 小
  • 如何将引导程序形式的输入与输入组插件对齐?

    我有一个非常简单的 Bootstrap 3 表单 当我不使用它时 我可以轻松 自动 对齐input group addons 在我的表单中使用它们后 无法对齐它 由于添加了插件 带有插件的线更宽
  • 了解 cassandra 复制因子与一致性级别

    我想澄清 Cassandra 中复制因子和一致性级别的基本概念 如果有人可以回答以下问题 我们将不胜感激 RF 复制因子 RC 读一致性 WC 写一致性 2 个 cassandra 节点 例如 A B RF 1 RC ONE WC ONE
  • 将 Tor 与 scrapy 框架结合使用

    我正在尝试抓取网站 该网站足够复杂以阻止机器人 我的意思是它只允许几个请求 之后 Scrapy 挂起 问题1 有没有办法 如果Scrapy挂起 我可以从同一点重新启动我的爬行过程 为了摆脱这个问题 我这样写了我的设置文件 BOT NAME
  • Haskell:集合上的递归函数

    我是 Haskell 的新手 我正在尝试编写一个 有点 基本的递归函数来生成集合的分区 我正在引用这个维基页面 https en wikipedia org wiki Partition of a set https en wikipedi