gpt4 book ai didi

Clojure Butlast与Drop-last

转载 作者:行者123 更新时间:2023-12-04 05:47:12 25 4
gpt4 key购买 nike

Clojure中的 butlast drop-last 有什么区别?

只是懒惰吗?我应该优先选择另一个吗?

最佳答案

同样,如果您需要实现整个集合,则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

关于Clojure Butlast与Drop-last,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36734213/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com