繁体   English   中英

似乎无法理解“列表差异”(\\)运算符

[英]Can't seem to get my head around the 'list difference' (\\) operator

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

(\\)运算符(以及difference function )实现了set difference ,因此,如果您有两个列表ab ,它只返回a中不在b中的那些元素,如图所示:

在此处输入图像描述

简而言之,它需要两个列表,遍历第二个列表,对于每个项目,从第一个列表中删除同一项目的第一个实例。

> [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]

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

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

或者,如果您可以在 Haskell 中执行此操作,

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

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

假设您有一个事物列表,例如城市。 让我们以这个列表为例:

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"]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM