为什么没有偷看! clojure瞬态向量的函数?

时间:2010-07-08 19:40:40

标签: data-structures clojure transient

Clojure的一些持久性数据结构,向量,映射和集合具有瞬态类似物。对于向量,有pop!conj!函数,类似于持久向量的popconj,但没有peek!

是否存在使peek!无法有效实施的技术原因?或者在瞬态向量的大多数用例中它是不是必需的?我总能做到

(defn peek! [tvec] (get tvec (dec (count tvec))))

但似乎很奇怪,没有内置的解决方案。

1 个答案:

答案 0 :(得分:5)

这真是一个最适合ggroup的设计问题,但是FWIW,我之前调查了peek / peek!,提供peek!似乎只是创建一个简单的问题并行clojure.lang.ITransientStack的新clojure.lang.IPersistentStack接口,并有瞬态向量实现它。

我的猜测是,如果这样的接口尚未可用(并由瞬态使用),则可能是优先级问题。 Clojure中已经以java.util.Stack的形式提供了单线程快速堆栈实现,因此我们不会错过这里的许多功能;句法方便和顺利转换为持久性向量可能会在Clojure-in-Clojure上取得进展。

(投入的努力回报很高,即使最终目标是最终放弃Java代码库的相关部分并将其替换为Clojure中的实现,对Clojure的Java方面的改进也是有意义的。返回值较低,等待协议更普遍地使用可能更有意义等。当前可用的处理瞬态的函数集足以满足Clojure自身的需求而且我不确定是否曾经调用{{1}在ggroup上 - 至于#clojure,我记得一个相关的对话 - 所以回报可能被判断为低......你可以开始草根运动来改变它。: - ))