「Clojure プログラミング」(98 ページ) のヘッド保持に関する段落を読んで、例で何が起こっているのか理解できませんでしたsplit-with
。repl を試してみましたが、もっと混乱しました。
(time (let [r (range 1e7)
a (take-while #(< % 12) r)
b (drop-while #(< % 12) r)]
[(count a) (count b)]))
"Elapsed time: 1910.401711 msecs"
[12 9999988]
(time (let [r (range 1e7)
a (take-while #(< % 12) r)
b (drop-while #(< % 12) r)]
[(count b) (count a)]))
"Elapsed time: 3580.473787 msecs"
[9999988 12]
(time (let [r (range 1e7)
a (take-while #(< % 12) r)
b (drop-while #(< % 12) r)]
[(count b)]))
"Elapsed time: 3516.70982 msecs"
[9999988]
最後の例からわかるように、 を計算しないa
と、時間がかかります。ここで何かを見逃したと思いますが、何ですか?