С учетом PersistentQueue в ref:
(def pq (ref clojure.lang.PersistentQueue/EMPTY))
Каков идиоматический способ выставить очередь и получить результат?
Моя лучшая попытка вашей критики:
(defn qpop [queue-ref]
(dosync
(let [item (peek @queue-ref)]
(alter queue-ref pop)
item))
alter возвращает значение in-transaction очереди, которое уже вытолкнуто, поэтому вы не можете просто выполнить изменение самостоятельно.