6
A
回答
8
另外,如果你需要實現全收集,butlast
是大大加快,如果你看看他們的來源,是合乎邏輯的:
(def
butlast (fn ^:static butlast [s]
(loop [ret [] s s]
(if (next s)
(recur (conj ret (first s)) (next s))
(seq ret)))))
(defn drop-last
([s] (drop-last 1 s))
([n s] (map (fn [x _] x) s (drop n s))))
所以drop-last
使用map
,而butlast
使用簡單的迭代與recur
。這裏是一個小例子:
user> (time (let [_ (butlast (range 10000000))]))
"Elapsed time: 2052.853726 msecs"
nil
user> (time (let [_ (doall (drop-last (range 10000000)))]))
"Elapsed time: 14072.259077 msecs"
nil
所以我不會盲目地喜歡一個在另一個。只有當我真的需要懶惰時才使用drop-last
,否則butlast
。
4
是的,懶惰以及drop-last
也可以採取n
這一事實,表明有多少元素從末端懶惰地放下。
有一個討論here那裏有人正在使情況butlast
是更具可讀性和Lisp的程序員也許熟悉的成語,但我通常選擇使用drop-last
。
相關問題
- 1. Erlang butlast函數
- 2. with-meta vs^{} - Clojure
- 3. 的Clojure:= VS ==
- 4. Cascalog deffilterop vs純clojure
- 5. clojure cons vs conj與lazy-seq
- 6. 併發模型:Erlang vs Clojure
- 7. clojure pmap/preduce vs fork-join
- 8. Clojure Web(HttpKit,Manifold)vs Elixir/Pheonix
- 9. Clojure koans :(如果false [])vs(如果false [:a:b:c])
- 10. Clojure打印功能:pr vs print
- 11. hadoop map reduce vs clojure pmap函數
- 12. Clojure:(double 0)vs(cast(class 0.0)0)
- 13. Clojure的讓VS多參數數量
- 14. Clojure的查找性能矢量VS集
- 15. 在Clojure中隨機遊走
- 16. Clojure宏實例化異常
- 17. 如何替換Clojure中的最後一個元素
- 18. clojure宏eval
- 19. 何時使用Clojure中的let vs if-let
- 20. clojure解構vs haskell-like參數模式匹配
- 21. clojure全局變量的最佳實踐(參考vs alter-var-root)?
- 22. let vs letfn在clojure中定義本地函數?
- 23. Clojure的擴展型VS DEFTYPE和協議實現
- 24. 在Leiningen(Clojure的)的Android(Java的1.7 VS 1.8)設置JavaVersion sourceCompatibility
- 25. 的Clojure:(適用FN科爾)VS(申請#(適用FN%)科爾)
- 26. Alter vs Clojure通勤:我做錯了什麼?
- 27. Clojure的:*總分* VS系統的輸入/輸出
- 28. Clojure內置函數的定義:def vs defn
- 29. CQRS vs. SQL與NoSQL for Clojure移動應用程序
- 30. Clojure中