10

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

是否有技术原因导致peek!无法有效实施?还是在大多数用例中都不需要瞬态向量?我总能做到

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

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

4

1 回答 1

5

这确实是一个最好针对 ggroup 的设计问题,但是 FWIW,我不久前确实进行了调查peekpeek!并且提供peek!似乎是一个简单的问题,即创建一个新clojure.lang.ITransientStack的并行接口clojure.lang.IPersistentStack并让瞬态向量实现它。

我的猜测是,如果这样的接口尚不可用(并且由瞬态使用),则可能是优先级问题。java.util.StackClojure中已经有一个单线程的快速堆栈实现,形式为 随着 Clojure-in-Clojure 取得进展,语法便利和向持久向量的平滑转换可能会出现。

(如果投入的努力回报很高,那么对 Clojure 的 Java 方面的改进是有意义的,即使最终目标是删除 Java 代码库的相关部分并用 Clojure 中的实现替换它。预期回报较低,等待协议被更普遍地使用等可能更有意义。当前可用的一组用于处理瞬态的函数足以满足 Clojure 自己的需求,我不确定peek!ggroup 是否曾经有人呼吁过——至于#clojure,我记得有一次相关的对话——所以回报可能被认为很低……不过,你可以发起一场草根运动来改变这一点。:-))

于 2010-07-08T22:14:25.607 回答