Неизменная очередь в Clojure

Что лучший способ состоит в том, чтобы получить простой, эффективный неизменный тип данных очереди в Clojure?

Только требуется две операции, ставьте в очередь и исключите из очереди с обычной семантикой.

Я рассмотрел списки и векторы, конечно, но я понимаю, что у них есть сравнительно низкая производительность (т.е. O (n) или хуже) для модификаций в конце и начинающийся соответственно - так не идеальный для очередей!

Идеально я хотел бы надлежащую персистентную структуру данных с O (зарегистрируйте n), и для ставить в очередь и исключают операции из очереди.

32
задан mikera 28 June 2010 в 21:57
поделиться

1 ответ

Проблема решена - решение для тех, кто может найти его полезным.

Я обнаружил, что в Clojure есть класс clojure.lang.PersistentQueue, который делает то, что необходимо.

Вы можете создать экземпляр следующим образом:

(def x (atom clojure.lang.PersistentQueue/EMPTY))

Насколько я понимаю, в настоящее время вам нужно использовать Java-взаимодействие для создания экземпляра, но, как услужливо указал Михал, вы можете впоследствии использовать peek, pop и Cong.

35
ответ дан 27 November 2019 в 21:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: