Я хотел бы сделать набор разностей между 2 целыми списками, которые позволяют повторения в haskell.Есть ли какой-то оператор Ord в списках в haskell?
Таким образом, в случае наличия [1,2,1,4,3] [1,2,4]
, разница будет [1,3]
В настоящее время я могу сделать это с помощью обычного \\
оператора listA \\ listB
.
Но проблема в том, что это слишком медленно. Поскольку целые числа находятся в группе ord, это можно сделать быстрее.
Я знаю модуль Data.Multiset
, который будет делать это быстрее, но есть ли способ сделать это по спискам без модуля Data.Multiset
?
Возможно, вам стоит рассмотреть Data.IntSet. – augustss
Проблема с структурой Set заключается в том, что она не содержит счет повторения. Например, если мы имеем в первом списке 4 единицы и во втором 2. Установленное различие будет [1], так как в первом списке больше, чем в другом. – Aleksandar
По какой-то причине вы, похоже, не используете библиотечный код, но [Data.List.Ordered] (http://hackage.haskell.org/package/data-ordlist-0.4.7.0/docs/Data-List-Ordered .html) имеет упорядоченные и мешочные операции в отсортированных списках, включая [минус] (http://hackage.haskell.org/package/data-ordlist-0.4.7.0/docs/Data-List-Ordered.html# v: минус). –