为啥没有窥视! clojure 瞬态向量的函数?

Posted

技术标签:

【中文标题】为啥没有窥视! clojure 瞬态向量的函数?【英文标题】:Why is there no peek! function for clojure transient vectors?为什么没有窥视! clojure 瞬态向量的函数? 【发布时间】:2011-03-13 13:07:08 【问题描述】:

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

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

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

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

非常感谢,这对您有帮助。我并不急需偷看!功能,但如果情况发生变化,我可能会考虑开始草根运动。现在我不想打扰我们明智的 BDFL 或他的副手。

以上是关于为啥没有窥视! clojure 瞬态向量的函数?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 let 需要一个向量?

包含混合向量和双精度的向量的 Clojure 减少函数

在绑定向量中注释 Clojure

Clojure 中的可插拔向量处理单元

在 Clojure 中,如何合并两个地图向量?

为啥这个 C 向量循环不自动向量化?