haskell - 通过模式匹配过滤列表

标签 haskell

我如何过滤列表,保留与模式匹配的项目,删除不匹配的项目?

例如,如果我有一个列表列表,我想要一个函数...

singleItemLists :: [[Int]] -> [[Int]]

... 删除所有与模式 [x] 不匹配的项目。

理想情况下,答案应该相当简单,可以转换为其他模式。

最佳答案

基于显式模式匹配和filter 的惯用版本是:

{-# LANGUAGE LambdaCase #-}

isSingleton :: [x] -> Bool
isSingleton = \case [_] -> True ; _ -> False;

singletonLists :: [[x]] -> [[x]]
singletonLists = filter isSingleton

我相信这更具可读性。作为一个额外的优势,我们得到了 isSingleton,它可以被重用于其他目的。

isSingleton 在内部列表的 spine 和元素中是惰性的。

关于haskell - 通过模式匹配过滤列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44422753/

相关文章:

haskell - Elm中,当信号下的值具有列表等复合类型时,如何高效更新一个元素

haskell - 这个 A 范式实现是否与 AST 的大小成线性关系?

haskell - 适用于大型、频繁变化的浮点序列的 Haskell 类型

haskell - 将一种类型约束为另一种类型的模式

haskell - if/else 控制 block 的良好 Haskell 编码风格?

haskell - 如何使用 Haskell 中的策略编写并行归约?

haskell - Haskell 数据类型中的类型类

haskell - 作业 : Comparing intermediate expressions with == in Haskell

list - 转换 [整数] -> 整数

string - 在 Haskell 中 Maybe String 和 Maybe Int 都是幺半群吗?