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中