我在Haskell中听过“list difference”(\\)
运算符这个术语,但仍然不太清楚如何理解它。任何例子或想法?
答案 0 :(得分:9)
(\\)
operator(和the difference
function)实施set difference,因此,如果您有两个列表a
和b
,则只返回不在a
中的b
,如图所示:
答案 1 :(得分:8)
简单地说,它需要两个列表,遍历第二个列表,对于每个项目,从第一个列表中删除相同项目的第一个实例。
> [1..10] \\ [2, 3, 5, 8]
[1,4,6,7,9,10]
> [1, 2, 1, 2, 1, 2] \\ [2]
[1,1,2,1,2]
> [1, 2, 1, 2, 1, 2] \\ [2, 2]
[1,1,1,2]
> [1, 2, 1, 2, 1, 2] \\ [2, 2, 1]
[1,1,2]
答案 2 :(得分:2)
xs \\ ys
是xs
中不在ys
中的所有元素。也许列表理解会澄清这一点:
xs \\ ys = [ x | x <- xs, x `notElem` ys ]
或者,如果您可以在Haskell中执行此操作,
xs \\ ys = [ x | x `elem` xs, x `notElem` ys ]
这来自set theory的set difference。基本思想是你从另一个元素中“减去”一个元素集合,因此称为“差异”。
答案 3 :(得分:0)
假设您有一系列事物,例如城市。我们以此列表为例:
a = ["London","Brussels","Tokio","Los Angeles","Berlin","Beijing"]
现在您要删除所有位于欧洲的城市。你知道,那些城市在欧洲:
b = ["Glasgow","Paris","Bern","London","Madrid","Amsterdam","Berlin","Brussels"]
要获取a
中不属于欧洲的城市列表,以便不在b
中,您可以使用(\\)
:
a \\ b = ["Tokio","Los Angeles","Beijing"]