Haskell 使用数据构造函数过滤嵌套列表

2024-02-27

假设我有以下数据类型

data Number = Positive Integer | Negative Integer
     deriving (Eq, Show)

我有一个函数定义(请注意,我无法更改此定义,或以任何方式解决它。我必须使用嵌套列表并以某种方式修改它)

removePos :: [[Number]] -> [[Number]]

所以我们有一个嵌套的 Number 列表。一个例子是

[[Positive 1, Negative 1], [Positive 2, Negative 2, Positive 1], [Positive 1]]

如何编写removePos,以便删除嵌套列表中包含正x的所有列表,其中x是特定整数?该函数本质上是查看第一个列表中的第一个元素,如果它是正数,则删除包含正数 x 的所有列表。

本质上,如果我们看一下上面的示例,输出将是

[[]]

请注意,用户执行以下函数调用

removePos [[Positive 1, Negative 1], [Positive 2, Negative 2, Positive 1], [Positive 1]]

由于上面嵌套列表中的每个列表都包含 Positive 1,因此输出只是一个空嵌套列表(所有具有 Positive x 的列表都将被删除)。但是,如果第一个列表中的第一个元素为正 10,则输出将为

[[Positive 2, Negative 2, Positive 1], [Positive 1]]

(因为第一个列表将包含 [Positive 10, Negative 1],它将被删除)

有任何想法吗?

EDIT:

再举个例子,假设我有一个篮子,里面装着几碗水果。篮子是嵌套列表,碗是其中的列表。现在,我看看篮子里的东西。我检查第一个碗。我看着碗里的第一个水果,然后决定我不想吃任何碗里的那个水果。所以我扔掉所有装有那种水果的碗,然后把篮子还给你。


一种方法是在嵌套列表上进行模式匹配,以查看第一个列表的第一个元素,以确定需要过滤的内容:

-- Note you could give this the more general type Eq a => [[a]] -> [[a]]
-- (as well as a more appropriate name)
removePos :: [[Number]] -> [[Number]]
removePos [] = [] -- Empty list case.
removePos xss@[[]:_] = xss -- If the first inner list is empty,
                           -- return the whole thing unchanged
removePos ((x:_):xss) = filter (notElem x) xss
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Haskell 使用数据构造函数过滤嵌套列表 的相关文章

  • 这是 unsafeCoerce 的安全使用吗?

    我遇到的情况是 我目前正在使用极其可怕的函数 unsafeCoerce 幸运的是 这并不是为了任何重要的事情 但我想知道这是否是该函数的安全使用 或者是否有其他方法可以解决其他人知道的这个特定问题 我的代码类似于以下内容 data Toke
  • 如何让 esqueleto 为我生成 SQL 字符串?

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

    仍在 Haskell 中进行 SHA1 实现 我现在已经有了一个有效的实现 这是内部循环 iterateBlock Int gt Word32 gt Word32 gt Word32 gt Word32 gt Word32 gt Word3
  • Haskell 为替代的 Either 数据类型定义 Functor 实例

    通过 Typeclassopedia 获得一些使用类型类的路由 想要替代Either的一个实例Functor 但即使检查定义Either作为一个例子Functor总是给我带来麻烦 有这个 但不会编译 data Alt a b Success
  • 为什么 GHC 在这里推断出单态类型,即使禁用了单态限制?

    这是由解析 f f pure 的类型 https stackoverflow com questions 55388119 resolving the type of f f pure 55388309 noredirect 1 comme
  • 在 Haskell 中调试时打印时间戳

    我仍在学习 Haskell 并调试一些函数 并且通常有一个时间戳函数来了解某些操作何时开始和停止 doSomeAction String gt IO doSomeAction arg1 do putStrLn lt lt makeTime
  • 函数式语言与语言实现的角度有何不同

    出现了全新的 函数式编程 范式 与过程式编程相比 它需要彻底改变思维模式 它使用高阶函数 纯度 单子等 我们通常在命令式和面向对象语言中不会看到这些 我的问题是如何执行这些语言与命令式或面向对象语言的不同之处在于 例如内存管理或指针等内部结
  • 将“Functor”类泛化为“MultiFunctor”?

    我正在学习 自由应用函子 https arxiv org pdf 1403 0749 pdf 当然 我要问的问题有点偏离论文的主要思想 但仍然 第 6 页试图概括Functor to MultiFunctor class Functor f
  • 当约束成立时,将没有约束的 GADT 转换为另一个有约束的 GADT

    我们能否将构造函数没有给定约束的 GADT 转换为具有上述约束的 GADT 我想这样做是因为我想要深度嵌入箭头并用 目前 似乎需要的表示做一些有趣的事情Typeable 一个理由 https stackoverflow com a 1223
  • 带有参考的 Haskell 数据类型

    我正在实现 Ukkonen 的算法 该算法要求树的所有叶子都包含对同一整数的引用 并且我在 Haskell 中执行此操作是为了了解有关该语言的更多信息 但是 我很难编写出执行此操作的数据类型 Node has children indexe
  • 在不同上下文中使用的多态变量 haskell

    我有以下一段 Haskell 代码 foo Num a gt a gt a gt Either Integer Double gt Either Integer Double foo f x case x of Left i gt Left
  • 如何在Haskell中定义一个允许统一访问不同记录的类?

    我有两条记录 它们都有一个我想要提取以显示的字段 我如何安排事物以便可以使用相同的功能来操纵它们 由于它们有不同的字段 在本例中firstName and buildingName 这是它们的名称字段 它们每个都需要一些 适配器 代码来映射
  • 我可以在线性时间内检查有界列表是否包含重复项吗?

    假设我有一个Int列表 其中元素已知是有界的 并且列表已知不长于它们的范围 因此它完全有可能不包含重复项 如何才能最快地测试是否是这种情况 我知道nubOrd https hackage haskell org package contai
  • 在 GHCi 中,为什么我不能在 REPL 中显示 `pure 1`?

    我尝试将提升值分配给a gt m Control Applicative gt let a pure 1 当我评价的时候a在 REPL 中 它打印1 gt a 1 因此 我认为可能会实施show for a 并尝试了这个 gt show a
  • Haskell:去掉 liftM2 中的括号

    如何去掉标有的括号 而不引入新名称 如果能分成多行就更好了 liftM2 somefunc arg1 get arg2 somefunc arg3 get arg3 您可以使用以下方法删除最后一个 但另一个显然不能在不引入新名称的情况下被删
  • Haskell - 交替两个列表中的元素

    我正在尝试编写一个 haskell 函数 它接受两个整数列表并生成一个列表 其中包含从两个列表中交替获取的元素 我有这个功能 blend xs ys 一个例子 blend 1 2 3 4 5 6 应该返回 1 4 2 5 3 6 我的逻辑是
  • 测试列表是否已排序

    在 haskell 中找到最小列表确实很容易 foldl1 min 9 5 7 3 7 4 6 10 给我3 我更换了min with lt 测试列表是否已排序 foldl1 lt 9 5 7 3 7 4 6 10 我收到此错误消息 No
  • 当单态限制打开*时,如何解决歧义问题?

    因此 在学习 Haskell 时 我很快就遇到了可怕的单态限制 在 ghci 中 Prelude gt let f print show Prelude gt f 5
  • 绑定变量时 Haskell 中的无限循环

    下面的 Haskell 代码不会终止 有人可以解释一下为什么吗 谢谢 f let x 10 in let x x x in x 我认为解释器首先绑定 x 10 然后将 x x 计算为 100 并绑定 x 100 环境变为 x 100 那么整
  • 为什么这会导致 Haskell Conduit 库内存泄漏?

    我有一个conduit https hackage haskell org package conduit管道处理长文件 我想每 1000 条记录为用户打印一份进度报告 所以我这样写 Every n records perform the

随机推荐

  • android ProgressDialog字体大小改变

    是否可以更改字体大小并使显示的文本加粗ProgressDialog 我创建了一个ProgressDialog像这样 private ProgressDialog dialog this dialog ProgressDialog show
  • 关于可哈希对象的解释需要解释

    马克 兰塞姆 https stackoverflow com users 5987 mark ransom回答于SO关于哈希的问题 https stackoverflow com questions 2671376 hashable imm
  • 使用 Windows 凭据和 .net 4.5 WIF 的 RequestSecurityToken

    任何人都可以指出使用 NT 凭据主动发出 RequestSecurityToken 的示例代码吗 Thread CurrentPrincipal as ClaimsPrincipal 该场景是一个启用了 Windows 身份验证的 ASP
  • 离线时不会调用 Firebase onDataChange

    关于 Firebase ValueEventListener 我遇到了一个非常奇怪的情况 当手机连接到互联网时 它可以正常工作 但是当它离线时 它不会调用onDataChange 这段代码即使在离线状态下也能很好地工作 mDatabase
  • 我可以在 Typescript 方法装饰器中访问目标类实例吗?

    我正在 Typescript 中创建一个 WebSocket 服务器 其中不同的应用程序组件应该能够注册自己的请求处理程序 有一个单例WebsocketHandler提供了这种行为 如果没有装饰器 类可以像这样注册其请求处理程序 class
  • AdMob 广告未显示在模拟器中

    我正在我的应用程序中集成 AdMob 广告 我正在模拟器中运行 y 应用程序 并且在 admob 中我已将设备 ID 设置为模拟器 但即使在广告没有显示在模拟器中之后 下面是我的代码 XML
  • 在 Windows 上为 Haskell 安装 SDL (GHC)

    背景 我一直在使用光泽库进行一些简单的图表工作 但当需要更具交互性的东西时 我发现我需要一个更强大的库 经过一些研究后 我决定我喜欢 SDL 库的功能 并想尝试为其安装 Haskell 绑定 到目前为止我还没有成功 Part 1 如何安装和
  • hg revert 和 hg backout 之间有什么区别?

    Both hg revert and hg backout恢复先前修订版所做的更改 两者有什么区别 鉴于变更集的历史 A B C D E bad hg revert r B 保持当前版本 但更新工作目录 截至修订版B 它具有撤销更改的补丁的
  • iOS:全页插页式广告关闭后显示黑屏

    我用此代码显示全屏广告 它可以显示全页广告 问题是 当我关闭广告时 我只有一个空白屏幕 它不再显示我的应用程序 My code void showFullScreenAd if requestingAd NO interstitial AD
  • 谷歌地图意外地重置相机缩小

    我有基于谷歌地图的应用程序 允许用户查看标记 我遇到的问题是 当我放大以查看地图上的所有标记时 几秒钟后地图将重置为原始缩放级别 并且我无法查看所有标记 我希望地图保持在用户缩放级别 但我无法想出逻辑 这是我的代码 Override pro
  • Java/Swing:从另一个类引用组件

    我有一个 Swing GUI 使用 Netbeans GUI Builder 构建 有一个标签 我可以使用箭头键来移动它 按空格键调用另一个类 我如何从此类访问标签 例如得到职位 预先感谢您的帮助 第二类的示例代码 public class
  • 如何指定API版本?

    根据Azure DevOps 服务 REST API 参考 https learn microsoft com en us rest api azure devops view azure devops rest 4 1 请求 URI 的格
  • javascript getDate getMonth 返回错误的月份[重复]

    这个问题在这里已经有答案了 我知道还有其他关于此的帖子 但我无法弄清楚我在这里做错了什么 下面是我的代码 var d new Date var month d getMonth System log d System log month 我
  • javascript 中的 wget 相当于从给定 url 下载文件的功能是什么?

    wget http www example com file doc http www example com file doc 将该文件下载到本地磁盘 在 javascript 中 上面的等价物是什么 例如 考虑以下 html 片段
  • 在 Objective C 中将对象添加到 NSMutableArray 时遇到问题

    我正在使用 iPhone SDK 但在执行一些简单操作时遇到问题 我正在尝试添加一个NSNumber反对NSMutableArray实例变量 我尝试添加 NSNumbercard到 NSMutableArray已查看的卡片数组 但是如果不破
  • 如何点击外部关闭这个菜单?

    我有这个菜单 CSS message display none position absolute width 120px background fff color 000 font weight bold 当我点击它时 它会打开 mess
  • Twitter 引导程序预先输入多个值?

    我正在使用 Twitter Bootstrap 和 Jquery 我想使用预先输入文本区域的函数 我可以非常轻松地使用它 但我也需要它允许多项选择 我的意思是 当我从自动完成中选择一个单词后 它会将我带回文本区域 然后再添加一个空格 然后如
  • crt0.o 和 crt1.o -- 有什么区别?

    最近我一直在尝试调试一些低级工作 但找不到crt0 S对于编译器 avr gcc https linux die net man 1 avr gcc 但我确实找到了crt1 S 与相应的 o files 这两个文件有什么区别 是crt1完全
  • Quasar:使用q-file选取图像时如何显示图像?

    Quasar 和 Vue 的新手 我正在使用 q file 它允许选择文件并拖放文件 但是 如何显示预览图像 Q uploader 似乎可以工作 但我如何更改它的用户界面 来自 Quasar 的组件链接 https quasar dev v
  • Haskell 使用数据构造函数过滤嵌套列表

    假设我有以下数据类型 data Number Positive Integer Negative Integer deriving Eq Show 我有一个函数定义 请注意 我无法更改此定义 或以任何方式解决它 我必须使用嵌套列表并以某种方