Hãy nói rằng tôi có một LazySeqLiệu `đếm` có nhận ra một chuỗi lười biếng trong Clojure không?
(def s (mất 10 (lặp + 0)))
Liệu (count s)
nhận ra trình tự?
Hãy nói rằng tôi có một LazySeqLiệu `đếm` có nhận ra một chuỗi lười biếng trong Clojure không?
(def s (mất 10 (lặp + 0)))
Liệu (count s)
nhận ra trình tự?
Nếu bạn đang hỏi về các trình tự lười biếng, Có.
user> (def s (map #(do (println "doing work") %) (range 4)))
#'user/s
user> (count s)
doing work
doing work
doing work
doing work
4
Một số cấu trúc dữ liệu có thể cung cấp cho bạn câu trả lời trong thời gian liên tục, mặc dù chuỗi lười biếng không có một số lưu trữ, và đếm luôn nhận ra họ.
Phụ thuộc vào định nghĩa của chuỗi lười. Nó có thể thực hiện những người biết chiều dài của họ mà không nhận ra các yếu tố của họ. Xem this question cho một ví dụ, nhưng trong 99% các trường hợp họ chỉ là LazySeqs nên câu trả lời của Michiel nên đề cập đến điều đó.
Trong trường hợp ví dụ của bạn thật dễ dàng để kiểm tra, như:
(realized? s)
lợi nhuận true
sau khi gọi (count s)
, vì vậy s
là không 'thông minh' đủ để biết đó là chiều dài mà không nhận ra đó là nội dung.
Ồ tôi không biết về 'nhận ra?'. Cảm ơn! – al3x
Đối với một LazySeq có, bạn có thể xem phương pháp tính của nó here. Nó đi mọi phần tử từ đầu đến đuôi.
việc đầu tiên không cần thiết –
oops, cảm ơn. đã sửa. –