通过模式匹配过滤列表

Mic*_*mza 2 haskell

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

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

singleItemLists :: [[Int]] -> [[Int]]
Run Code Online (Sandbox Code Playgroud)

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

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

Cen*_*ril 5

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

{-# LANGUAGE LambdaCase #-}

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

singletonLists :: [[x]] -> [[x]]
singletonLists = filter isSingleton
Run Code Online (Sandbox Code Playgroud)

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

isSingleton 在内部列表的脊椎和元素中是懒惰的。