(take 2 (for [x (range 10)
:let [_ (println x)]
:when (even? x)] x))
>> (* 0
* 1
* 2
* 3
* 4
* 5
* 6
* 7
* 8
* 9
0 2)
Tôi cho rằng tôi chỉ đơn giản là dày đặc. Nhưng không, nó chỉ ra rằng Clojure thực sự đánh giá 32 thành phần đầu tiên của bất kỳ trình tự lười biếng nào (nếu có). Ouch.Có phải 'for' không thực sự lười biếng trong clojure?
Tôi đã có một for
với cuộc gọi đệ quy trong :let
. Tôi đã rất tò mò là tại sao tính toán dường như được tiến hành trong một bề rộng đầu tiên chứ không phải là chiều sâu đầu tiên thời trang. Dường như tính toán (mặc dù, để công bằng, không phải bộ nhớ) đã bùng nổ khi tôi tiếp tục đi xuống tất cả các nhánh trên của cây đệ quy. 32-chunking của Clojure đang đánh giá bề rộng đầu tiên, mặc dù mục đích hợp lý của mã là chiều sâu đầu tiên.
Dù sao, có cách nào đơn giản để buộc 1-chunking hơn 32-chunking của trình tự lười biếng?
Cảm ơn bạn! Điều này đã khiến tôi bối rối trong hai giờ. Tôi không thể tìm ra lý do tại sao (mất 1 (bản đồ một số func [1 2 3 4])) đánh giá một số func cho tất cả 4 yếu tố ... Tôi phải nói, không rõ tại sao điều đó xảy ra, đọc tài liệu trên "bản đồ" và "lấy" –