haskell - 如何删除Haskell中两个字符串列表之间的公共(public)元素?

标签 haskell

我是 Haskell 的初学者。我想比较两个字符串列表并删除列表之间的公共(public)元素并返回一个具有唯一元素的新列表。

以下是我拥有的代码:

Prelude Data.List> let list_1 = ["apple", "orange", "apple"]
Prelude Data.List> let list_2 = ["apple"]
Prelude Data.List> let removeCommonWords  xs ys = filter (\x -> x `elem` ys) xs
Prelude Data.List> removeCommonWords list_1 list_2

上述代码的输出:
["apple","apple"]

目前,filter函数过滤常用词并返回一个包含常用词的新列表。但是,我希望它返回一个包含唯一单词的新列表。我想我需要一个新的过滤函数的正则表达式。

预期输出:
["orange"]

我还尝试了以下方法:
Prelude Data.List> let removeCommonWords  xs ys = filter (\x -> x `elem` ys) xs
Prelude Data.List> remove ["orange", "apple", "apple"] "apple" 

上述代码的输出是:
["orange"]

但是,我想比较两个字符串列表 - 而不是列表和字符串。

最佳答案

我想这就是你想要的

let removeCommonWords  xs ys = filter (\x -> not (x `elem` ys)) xs

编辑 :
您也可以使用notElem直接为:
let removeCommonWords  xs ys = filter (\x -> x `notElem` ys) xs

关于haskell - 如何删除Haskell中两个字符串列表之间的公共(public)元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47943575/

相关文章:

haskell - 尝试对其键的子集进行镜头/遍历图多重更新

haskell - 函数组合问题

Haskell:链接状态单子(monad)

haskell - 如何退出 Hackstack 服务器应用程序?

algorithm - Haskell foldl'没有节省预期的空间

list - 满足 haskell 中大多数元素的函数

haskell - 计算 `map . foldr`的类型

haskell - 将 monad 转换为 IO

haskell - 为什么管道定义内部功能

haskell - 如何仅使用 Haskell 无休止地运行 Haskell 程序?