簡體   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