2010-07-08 44 views
10

Clojure針對其持久數據結構,向量,映射和集合的一些暫態類比。對於載體,存在pop!conj!函數,類似於popconj的持久性載體,但沒有peek!爲什麼沒有偷看!函數爲clojure瞬態矢量?

是否有技術原因使peek!不可能有效實施?或者,在瞬態矢量的大多數使用情況下,它不是必需的嗎?我總是可以做

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

但似乎很奇怪,沒有內置的解決方案。

回答

5

這真是一個設計問題的最佳指向ggroup,但FWIW,我沒有調查peek/peek!前一段時間,並提供peek!似乎是創建一個新的clojure.lang.ITransientStack接口平行clojure.lang.IPersistentStack並具有瞬態載體實現一個簡單的事情它。

我的猜測是,如果這樣的接口尚不可用(並被瞬態使用),這可能是一個優先事項。一個單線程快速堆棧實現已經在Clojure中以java.util.Stack的形式提供,所以我們不會錯過這裏的許多功能;句法的方便和順利轉換爲持久性向量可能會在Clojure-in-Clojure中取得進展。即使最終目標是最終放棄Java代碼庫的相關部分並將其替換爲Clojure中的實現,對Clojure的Java方面的改進也是有意義的。預期回報較低,因此等待協議更普遍地使用可能更有意義。目前可用的一組處理暫態的功能足以滿足Clojure自己的需求,而且我不確定是否有任何呼叫peek! ggroup - 至於#clojure,我記得有一次相關的談話 - 所以回報可能被認爲是低的...你可以開始一個草根運動來改變這個,但是。:-))

+0

非常感謝你,幫助。我並不需要偷看!功能,但如果這種變化,我可能會考慮啓動基層活動。現在我不想打擾明智的BDFL或他的副手。 – 2010-07-09 21:58:00

相關問題