Đọc đoạn về lưu giữ đầu trong "Lập trình Clojure" (trang 98), tôi không thể tìm ra điều gì xảy ra trong ví dụ split-with
. Tôi đã cố thử nghiệm repl nhưng nó làm tôi bối rối hơn.Giữ chân ở Clojure
(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]
Như bạn có thể nhìn thấy từ ví dụ cuối cùng, nếu tôi không tính toán a
, tốn thời gian bằng cách nào đó phát triển. Tôi đoán, tôi đã bỏ lỡ một cái gì đó ở đây, nhưng những gì?
Câu hỏi này trùng lặp với http://stackoverflow.com/questions/15994316/clojure-head-retention, câu trả lời hay. – robvir