Я не могу придумать что-то более идиоматическое, если не считать абстрагирование тела от вашего досинкинга.
Однако, если вас ждет трюк, вы можете попробовать взломать один за другим : всегда рассматривайте голову PQ как мусор (он содержит ранее извлеченный элемент). Отсюда следует, что вы можете переписать qpop
:
(defn qpop [queue-ref]
(peek (alter queue-ref pop))
Это предполагает добавление специальных проверок на пустоту (в частности, когда вы соединяетесь). Это также означает, что ссылка на элемент должна храниться дольше, чем следовало бы (однако, если вы посмотрите на значение PQ, вы увидите, что при этом он может слишком долго хранить ссылки на всплывающие элементы, так что живость уже мутная).
Я использовал этот хак здесь .