Jas*_*ker 7 lisp java clojure priority-queue immutability
我想在clojure中包装java的PriorityQueue类,以便在我的程序的另一部分中使用.我想弄清楚的是,是否有任何方法以lispy方式执行此操作并使优先级队列不可变.有没有什么好方法可以做到这一点,或者我是否会更好地使用PriorityQueue作为可变数据结构?
我认为有一种简单的方法可以将可变数据结构包装为不可变数据结构.当新版本能够以巧妙的方式与旧版本共享数据时,不可变数据结构变得高效,而我无法真正看到如何在不访问内部版本的情况下完成此操作PriorityQueue.
如果你真的想要一个持久的优先级队列,这个线程可能会很有趣 那些似乎有线性时间插入,所以如果这是一个问题,你可能需要寻找另一个实现.
编辑:第二个想法,持久优先级队列的简单实现只是将(prio,value)-pairs存储在有序集合中.像这样的东西:
(defn make-pqueue []
(sorted-set))
(defn pqueue-add [pq x prio]
(conj pq [prio x]))
(defn pqueue-peek [pq]
(first pq))
(defn pqueue-pop [pq]
(let [top (first pq)]
(disj pq top)))
Run Code Online (Sandbox Code Playgroud)
当然,上面的代码非常有限(例如,没有多个条目),但它说明了这个想法.