列表的列表的列表

2024-01-10

表示类型的好方法是什么LoL a,是列表的列表 的...的a?嵌套级别是任意的,但总体上是统一的 外部列表的元素。

我想到的情况是对 a 的成员进行分组 列表,然后对每个子组应用下一个分组,依此类推。它 事先并不知道需要应用多少个分组。因此:

rGroupBy :: [(a -> a -> Bool)] -> [a] -> [...[a]...]

类型签名的额外奖励分rGroupBy ;-)

例子:

Suppose deweyGroup i根据第 i 个数字对元素进行分组

rGroupBy [deweyGroup 1, deweyGroup 2] 
         ["1.1", "1.2.1", "1.2.2", "2.1", "2.2", "3"]

gives:

[ [ [ "1.1" ], [ "1.2.1", "1.2.2" ] ],
  [ [ "2.1" ], [ "2.2" ] ],
  [ [ "3" ] ]
]

后记

一天后,我们有了 4 个优秀且互补的解决方案。我对这些答案非常满意;谢谢你们。


强制所有分支具有相同深度的约束的另一种方法是使用嵌套数据类型:

data LoL a = One [a] | Many (LoL [a])

mapLoL :: ([a] -> [b]) -> LoL a -> LoL b
mapLoL f (One xs) = One (f xs)
mapLoL f (Many l) = Many $ mapLoL (map f) l

rGroupBy :: [a -> a -> Bool] -> [a] -> LoL a
rGroupBy [] xs = One xs
rGroupBy (f:fs) xs = Many $ mapLoL (groupBy f) $ rGroupBy fs xs

扩展定义LoL,我们非正式地看到,

LoL a = [a] | [[a]] | [[[a]]] | ...

那么我们可以说,例如:

ghci> rGroupBy [(==) `on` fst, (==) `on` (fst . snd)] [ (i,(j,k)) | i<-[1..3], j<-[1..3], k<-[1..3]]

去取回

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

列表的列表的列表 的相关文章

  • 使用 Parsec 解析正则表达式

    我正在尝试通过实现一个小型正则表达式解析器来学习秒差距 在 BNF 中 我的语法类似于 EXP EXP LIT EXP LIT 我尝试在 Haskell 中实现这一点 expr try star lt gt try litE lt gt l
  • 如何让 esqueleto 为我生成 SQL 字符串?

    我怎样才能让esqueleto从a生成一个SQL字符串from陈述 的文档toRawSql说 你可以打开持久的查询日志记录 我尝试了所有可能的形式MonadLogger我可以理解 但它从未打印任何 SQL 同一文档还说 手动使用此功能 是可
  • 使用默认值压缩而不是删除值?

    我正在 haskell 中寻找一个函数来压缩两个长度可能不同的列表 我能找到的所有 zip 函数都只是删除列表中比其他列表长的所有值 例如 在我的练习中 我有两个示例列表 如果第一个比第二个短 我必须用 0 填充 否则我必须使用 1 我不允
  • 在ghci中,如何删除现有的绑定?

    我收到一个 绑定影响现有绑定 错误 类似于以下错误this https stackoverflow com questions 2902716 in haskell what does it mean if a binding shadow
  • Cabal 无法安装依赖项,但如果直接询问可以安装它们

    我发现 Cabal 反复出现一个非常奇怪的问题 它影响了我获得可重复的 Haskell 构建的能力 我有一个带有沙箱的阴谋集团项目 如果我做cabal install 我收到以下形式的错误 Y failed during the build
  • 承诺的反面是什么?

    承诺代表将来可能可用 或无法实现 的值 我正在寻找的是一种数据类型 它表示将来可能变得不可用的可用值 可能是由于错误 Promise a b TransitionFromTo
  • 过滤路径列表以仅包含文件

    如果我有一个清单FilePaths 如何过滤它们以仅返回常规文件 即不是符号链接或目录 例如 使用getDirectoryContents main do contents lt getDirectoryContents foo bar l
  • monadicIO 的工作原理

    我有以下代码 fastShuffle a gt IO a fastShuffle a
  • 当我调用 Haskell 子字符串函数时,为什么会收到“函数中的非详尽模式...”?

    我正在努力读完这本书Haskell 通向逻辑 数学和编程之路 https rads stackoverflow com amzn click com 0954300696 我才读到第一章的一半 但到目前为止我很享受它并打算继续 我已经阅读了
  • 将List中的相邻元素放入元组中

    给定一个元素列表 xs a b c d z where a b c等是任意值的占位符 我想实现一个功能adjacents a gt a a 产生 adjacentValues a b b c c d y z 在 Haskell 中 递归定义
  • 在 Haskell 中证明“没有腐败”

    我所在的行业对安全要求很高 我们的软件项目一般都会有安全要求 我们必须证明该软件具有高度确定性 通常这些都是负面的 例如 腐败的频率不得超过 1 我要补充的是 这些要求来自统计系统安全要求 损坏的根源之一显然是编码错误 我想使用 Haske
  • Haskell:去掉 liftM2 中的括号

    如何去掉标有的括号 而不引入新名称 如果能分成多行就更好了 liftM2 somefunc arg1 get arg2 somefunc arg3 get arg3 您可以使用以下方法删除最后一个 但另一个显然不能在不引入新名称的情况下被删
  • 在没有互联网连接的情况下使用 cabal 安装 Haskell 软件包

    我有一台根本无法访问互联网的机器 我使用通过随身碟从另一台机器获得的安装程序在其上安装了 Haskell 平台 现在我想安装这个包repa在我的家用机器上 无法访问互联网 我该怎么做呢 我的家用计算机运行的是 Linux Debian 我的
  • Haskell 中的参数数量和无点 [重复]

    这个问题在这里已经有答案了 对于多重模式匹配 不同数量的参数是不可能的 即使是无点的 foo True b b 2 foo id 例如 不起作用 但 foo True 2 foo id 做 有时我们只能在函数的一部分使用 point fre
  • 如何使用 alex/haskell 执行 python 风格的缩进/缩进标记?

    我正在用 Haskell 为 Alex 中的一种小语言编写一个词法分析器 该语言被指定为具有 python 式的显着缩进 只要缩进级别发生变化 就会发出 INDENT 标记或 DEDENT 标记 在像 C 这样的传统命令式语言中 您将在词法
  • 模式匹配中的 Monoid mempty

    我尝试写一个通用的maximum功能类似于Prelude 我的第一个天真的方法如下所示 maximum F Foldable a Ord b gt a b gt Maybe b maximum mempty Nothing maximum
  • 结构上强制的自由替代,没有左派分配性

    有一个不错的免费替代品 http hackage haskell org package free 4 12 4 docs Control Alternative Free html在伟大的free包 它将函子提升到左分配替代方案 也就是说
  • 在 win32/cygwin 上编译 haskell 模块网络

    我正在尝试编译 Network HTTP http hackage haskell org package network http hackage haskell org package network 在 win32 cygwin 上
  • 哈斯克尔状态单子

    是否putState Monad 的函数会更新实际状态还是仅返回具有新值的新状态 我的问题是 State Monad 可以在命令式设置中像 全局变量 一样使用吗 并且确实put修改 全局变量 我的理解是 不 它不会修改初始状态 但是使用单子
  • 当单态限制打开*时,如何解决歧义问题?

    因此 在学习 Haskell 时 我很快就遇到了可怕的单态限制 在 ghci 中 Prelude gt let f print show Prelude gt f 5

随机推荐

  • XPath仅在直接子节点中选择一种类型的节点

    也许有人可以帮助我找到问题的解决方案 我需要在下面的 xml 中执行 XPath 查询 仅提取作为直接子节点的 Field 节点 在下面的示例中 查询应提取字段 E1F1 E1F2 和 E1F3 到目前为止我正在运行查询 Field 但我得
  • python套接字在逐行调试时工作正常,但在完整运行时无法工作[重复]

    这个问题在这里已经有答案了 我正在开发一个项目 该项目涉及传输文件 并为文件的每个块进行 CRC 校验和计算 例如此处为 40960 字节 我的问题是 当我逐行调试代码时 一切正常 但当我完全运行代码时 我在接收器端得到不同的 CRC 校验
  • React Material-UI 中“makeStyles”的内部实现?

    这个问题的目的是了解幕后发生的事情 每次我找到代码时makeStyles 我觉得我只是在做纯粹的复制粘贴 而不了解幕后发生的事情 所以我想在这里发布一个问题 以便有人可以帮助我 我在许多 React 应用程序中看到过以下代码 我很好奇 想知
  • 无法使用 Egit 和 Bitbucket 进行推送

    我一直在尝试使用 EGit 和 Bitbucket 启动一个项目 但无法将项目推送到服务器中的存储库 这些是我遵循的步骤 我会尝试非常具体 以便其他人可以将其用作教程模式 即使它对我不起作用 但可能对其他人有用 1 我在 Ubuntu 12
  • 仅用 CSS 可以扩展文本区域吗?

    我有一个高度为 200 像素的文本区域 但是当我通过文本传递 200 像素时 我希望扩展文本区域 而不是使用滚动条保留 200 像素的高度 只用CSS就可以做到这一点吗 代替textarea 您可以使用div with 内容可编辑 http
  • 这个弹出窗口类的名称是什么?

    我找不到这个类的名称 popover 苹果在他们的应用程序中大量使用它 我已经寻找过popover NSAlert 自定义隐藏 可见视图等等 这叫什么 This is UIAlertController 在ios 7之前它被称为UIActi
  • winforms 应用程序中托管的 MSIE WebBrowser 控件以兼容模式运行

    我以 winforms 形式托管 MSIE 不幸的是 无论我是否给它一个在独立 IE 中以 IE8 模式运行的页面 它都坚持以兼容模式运行 其结果是 一些在独立 MSIE 中正确呈现的内容在托管控件中完全错位和混乱 除了文档类型等之外 是否
  • 通过 URL cakePHP 传递多个、单个或无参数

    所以我有以下控制器函数来添加事件 public function add id null year null month null day null service id null project id null 在某些情况下 我需要做的是
  • pyenv-virtualenv:pyenv 中未安装“3.6.4”

    这让我很困惑 我不知道这意味着什么 我的计算机 MacOS 上安装了 3 6 4 但它不想工作 我想不出任何解决办法 也不知道该怎么办 无论你是在 Mac 还是 Linux 上 答案都略有不同 我不习惯在 Windows 上运行 Pytho
  • linux 区域设置未设置

    我有一台基于 ARM 的机器 上面装有 ubuntu 发行版 它经常在运行各种命令时向我提供以下信息 Please check that your locale settings LANGUAGE unset LC ALL unset LA
  • C#计算阶乘

    我有这段代码 它从用户那里获取输入并计算其阶乘和小于输入数字的阶乘 但我一直只获取第一个数字的阶乘 其余为 0 它应该是这样的 例如 如果输入为 5 5 120 4 24 3 6 2 4 1 1 如何让循环遍历输入数字下面的所有数字 usi
  • PrimeNg 数据表不刷新

    使用 Angular v2 4 8 和 PrimeNg v1 1 4 我有一个包含两个组件的页面 Dropzone 用于上传文件 p datatable 显示上传的文件 我将 Dropzone 配置为一次发送 5 个文件 当完成 5 个文件
  • 为什么我的 mysql DISTINCT 不起作用?

    为什么下面的两个查询返回重复的 member id 而不是第三个 我需要第二个查询来处理不同的 每当我运行GROUP BY 这个查询非常慢 并且结果集没有返回与 unique 相同的值 该值是错误的 SELECT member id id
  • 子进程可以在其父进程不死亡的情况下进入吗?

    Kill 它会立即终止进程吗 https stackoverflow com questions 8468866 kill does it kill the process right away 我找到了答案 并设置了一个信号处理程序SIG
  • 尝试打印我的矩阵而不是堆地址

    代码似乎可以运行 除了我得到的不是指定 由用户 大小的矩阵 而是我认为是堆地址 以下是当用户输入 2 作为尺寸 然后输入 4 个数字时返回的结果 输入矩阵大小 2 逐行输入 2 x 2 矩阵 2 3 4 5 行排序矩阵是 D 3c95454
  • jQuery 颜色选择器 z 轴问题

    我正在用这个选色器 http www eyecon ro colorpicker about 这真是太棒了 但是 我想在 jQuery 对话框中使用它 在表单内的输入标记上 但问题是当颜色选择器出现时 它部分位于对话框后面 在 z 轴上 因
  • GCP Cloud Run:禁用默认 URL 并仅使用自定义域?

    是否可以像这样禁用默认 URLhttps my app 332mpca uc a run app并且仅使用域映射中定义的自定义域 您无法使用自定义域来实现这一点 您可以通过在 Cloud Run 前面添加负载均衡器来实现类似的目标 这要归功
  • Node.js SFTP 客户端 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想通过 node js 应用程序访问 sftp 服务器 你知道有这个图书馆吗 或者你知道我如何实现这
  • Python 智能日期解析(不指定年份)

    如何解析没有年份的日期 使用 dateutil 以便当当前日期为 17 11 2012 时 这些日期将被解析如下 print parser parse 23 nov dayfirst True yearfirst False fuzzy T
  • 列表的列表的列表

    表示类型的好方法是什么LoL a 是列表的列表 的 的a 嵌套级别是任意的 但总体上是统一的 外部列表的元素 我想到的情况是对 a 的成员进行分组 列表 然后对每个子组应用下一个分组 依此类推 它 事先并不知道需要应用多少个分组 因此 rG