5

Haskellで「リスト差分」演算子という用語を聞いたことがあります(\\)が、それでも頭を動かす方法がよくわかりません。例やアイデアはありますか?

4

4 に答える 4

9

(\\)演算子(および関数)は集合のを実装するためdifference、2つのリストがあり、、の場合、次のように、に含まれていない要素のみを返します。abab

ここに画像の説明を入力してください

于 2011-05-29T13:59:13.270 に答える
8

簡単に言えば、2 つのリストを取得し、2 番目のリストを通過し、各項目について、同じ項目の最初のインスタンスを最初のリストから削除します。

> [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 \\ ysxsはにないのすべての要素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 に答える