我如何过滤列表,保留与模式匹配的项目,删除不匹配的项目?
例如,如果我有一个列表列表,我想要一个函数...
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/