Кажется, я не могу разобраться с оператором 'разница в списке' (\\) - PullRequest
5 голосов
/ 29 мая 2011

Я слышал термин «список различий» (\\) оператор в Хаскеле, но до сих пор не знаю, как с этим справиться.Какие-нибудь примеры или идеи?

Ответы [ 4 ]

9 голосов
/ 29 мая 2011

Оператор (\\) функция difference ) реализует разность установок , поэтому, если у вас есть два списка, a и b, он возвращает только те элементы a, которых нет в b, как показано:

enter image description here

8 голосов
/ 29 мая 2011

Проще говоря, он принимает два списка, проходит второй и для каждого элемента удаляет первый экземпляр того же элемента из первого списка.

> [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]
2 голосов
/ 29 мая 2011

xs \\ ys - это все элементы в xs, которых нет в ys.Возможно, понимание списка прояснит это:

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

или, если вы могли бы сделать это в Haskell,

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

Это происходит из теории множеств 's установить разницу .Основная идея заключается в том, что вы «вычитаете» одну коллекцию элементов из другой, отсюда и термин «разница».

0 голосов
/ 29 мая 2011

Предположим, у вас есть список вещей, например, города.Давайте возьмем для примера этот список:

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"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...