5

(\\)在 Haskell 中听说过术语“列表差异”运算符,但仍然不太清楚如何理解它。有什么例子或想法吗?

4

4 回答 4

9

(\\)运算符(和函数)实现differenceset difference ,因此,如果您有两个列表,a并且b,它只返回那些a不在 in 中的元素b,如图所示:

在此处输入图像描述

于 2011-05-29T13:59:13.270 回答
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]
于 2011-05-29T13:42:23.643 回答
2

xs \\ ys是所有xs不在的元素ys。也许列表理解会澄清这一点:

xs \\ ys = [ x | x <- xs, x `notElem` ys ]

或者,如果你可以在 Haskell 中做到这一点,

xs \\ ys = [ x | x `elem` xs, x `notElem` ys ]

这来自于集合论集合差。基本思想是您正在从另一个元素集合中“减去”一个元素集合,因此称为“差异”。

于 2011-05-29T17:30:29.247 回答
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"]
于 2011-05-29T13:42:54.353 回答