Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List Can';我似乎没有想到';列出差异';(\\)运算符_List_Haskell_Element_Set Difference - Fatal编程技术网

List Can';我似乎没有想到';列出差异';(\\)运算符

List Can';我似乎没有想到';列出差异';(\\)运算符,list,haskell,element,set-difference,List,Haskell,Element,Set Difference,我在Haskell中听到了“列表差异”(list difference)操作符,但我仍然不知道如何理解它。有什么例子或想法吗?简单地说,它有两个列表,经过第二个列表,对于每个项目,从第一个列表中删除同一项目的第一个实例 > [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,

我在Haskell中听到了“列表差异”(list difference)操作符,但我仍然不知道如何理解它。有什么例子或想法吗?

简单地说,它有两个列表,经过第二个列表,对于每个项目,从第一个列表中删除同一项目的第一个实例

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

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

a = ["London","Brussels","Tokio","Los Angeles","Berlin","Beijing"]
现在,您要删除欧洲的所有城市。你知道,这些城市都在欧洲:

b = ["Glasgow","Paris","Bern","London","Madrid","Amsterdam","Berlin","Brussels"]
要获取
a
中不在欧洲的城市列表,以便不在
b
中,您可以使用
(\\)

(and)实现,因此,如果有两个列表,
a
b
,它只返回
a
中不在
b
中的元素,如图所示:


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

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

这是从美国来的。基本思想是从一个元素集合中“减去”另一个元素集合,因此称为“差异”。

但它实际上实现了多集差异;参数列表允许多次包含相同的元素。如果我有以下声明:diff::(Eq a)=>[a]->[a]->[a]->[a],我想找出两个列表之间的差异?我应该如何继续?如果没有差分运算符,我将如何执行此操作?@matthias您可以将
(\\)
实现为
a\\b=filter(not.flip elem b)a
。抱歉,还有一件事。。。你能用非零分的形式写吗?@matthias,这差不多是它能做到的零分了。如果您愿意,我可以再添加一个lambda:
a\\b=filter(\x->not(x`elem`b))a
。噢,谢谢。。我其实不想要零分。我不知道它叫什么(新的)。我发现无点更难理解。我认为你现在写的方式更容易理解。如果我有这样的声明:diff::(Eq a)=>[a]->[a]->[a]->[a],我想找出两个列表之间的区别?我应该如何进行?
xs \\ ys = [ x | x <- xs, x `notElem` ys ]
xs \\ ys = [ x | x `elem` xs, x `notElem` ys ]