Что лучший способ состоит в том, чтобы получить простой, эффективный неизменный тип данных очереди в Clojure?
Только требуется две операции, ставьте в очередь и исключите из очереди с обычной семантикой.
Я рассмотрел списки и векторы, конечно, но я понимаю, что у них есть сравнительно низкая производительность (т.е. O (n) или хуже) для модификаций в конце и начинающийся соответственно - так не идеальный для очередей!
Идеально я хотел бы надлежащую персистентную структуру данных с O (зарегистрируйте n), и для ставить в очередь и исключают операции из очереди.
Проблема решена - решение для тех, кто может найти его полезным.
Я обнаружил, что в Clojure есть класс clojure.lang.PersistentQueue, который делает то, что необходимо.
Вы можете создать экземпляр следующим образом:
(def x (atom clojure.lang.PersistentQueue/EMPTY))
Насколько я понимаю, в настоящее время вам нужно использовать Java-взаимодействие для создания экземпляра, но, как услужливо указал Михал, вы можете впоследствии использовать peek, pop и Cong.