Haskell:反转 filter 谓词
问题: 在 Haskell 中,你打算使用反转的 filter 操作符进行过滤。
例如,你的代码是(GHCi):
example.hs
Prelude> import Data.List
Prelude Data.List> filter ( isPrefixOf "a" ) ["a","ab","cd","abcd","xyz"]
["a","ab","abcd"]你需要的列表是 ["cd","yz"]。在某些情况下,最简单的解决方案是使用例如 <= 而不是 >,但并非所有函数都有字面补集,例如示例中使用的 isPrefixOf。
解决方案:
你可以简单地组合 not 函数(组合通过使用组合操作符 . 完成)来否定谓词的结果。
example_negate.hs
Prelude> import Data.List
Prelude Data.List> filter ( not . isPrefixOf "a" ) ["a","ab","cd","abcd","xyz"]
["cd","xyz"]注意 not isPrefixOf "a"(注意缺少组合操作符)不起作用,因为你正在将 not 应用于柯里化函数。not 只能应用于 Bool。
更详细、更通用(但复杂得多)的解决方案在此 StackOverflow 文章中描述
Check out similar posts by category:
Haskell
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow