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))))
butlast
がrecur
との単純な反復処理を使用しながら、そうdrop-last
は、map
を使用しています。ここに少しの例があります:
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
私は盲目的に1つを優先しています。私はdrop-last
を使用するのは、私が本当に怠惰が必要な場合のみです。それ以外の場合はbutlast
です。
4
はい、怠惰であり、実際にはdrop-last
も、n
をとることができます。これは、最後から怠惰にいくつの要素をドロップするかを示します。
誰かがbutlast
をより読み、多分Lispプログラマのための身近なイディオムですが、私は一般的にちょうどdrop-last
を使用することを選ぶというケースを作って議論hereがあります。あなたは全体のコレクションを実現する必要がある場合
関連する問題
- 1. with-meta vs^{} - Clojure
- 2. Clojure:* out * vs System/out
- 3. Clojureのリスト操作
- 4. Clojure組み込み関数の関数定義:def vs defn
- 5. Clojureセットと異なるvs重複はありますか?
- 6. Clojureでベクトルの最後の要素を置き換える方法
- 7. ClojureクラスからのClojure ISeq
- 8. Clojure
- 9. Lamina vs Storm
- 10. Clojureのカウントリソース使用(REPLで、Clojureの1.7.0)
- 11. のClojureの喜びでClojureの
- 12. Clojureの
- 13. スワップ! Clojure
- 14. Clojure&ZeroMQ
- 15. Clojureオフラインインストール
- 16. Clojureプリセットデータベース
- 17. Clojureの
- 18. Clojureの
- 19. Clojureの
- 20. Clojureの
- 21. Clojureの
- 22. Clojureスレッドマクロ
- 23. Clojure - リングストリームレスポンス
- 24. Clojureは、
- 25. Clojure OutOfMemoryError
- 26. Clojure closure
- 27. Clojure#=リーダマクロ
- 28. Clojureの
- 29. Clojureの
- 30. Clojureの