Tôi hiện đang đọc cuốn sách lập trình O'reilly Clojure mà nó nói như sau trong đó là phần về chuỗi lười biếng:Làm thế nào để tìm chiều dài của chuỗi chậm mà không buộc phải thực hiện?
Có thể (mặc dù rất hiếm) cho một chuỗi lười biếng để biết chiều dài của nó, và do đó trả về kết quả đếm mà không nhận ra nội dung của nó.
Câu hỏi của tôi là, Điều này được thực hiện như thế nào và tại sao nó lại quá hiếm?
Thật không may, cuốn sách không chỉ định những điều này trong phần này. Cá nhân tôi nghĩ rằng nó rất hữu ích để biết độ dài của một chuỗi lười biếng trước khi nó thực hiện, ví dụ, trong cùng một trang là một ví dụ về một chuỗi các tập tin lười biếng được xử lý với một chức năng sử dụng map
. Nó sẽ được tốt đẹp để biết có bao nhiêu tập tin có thể được xử lý trước khi thực hiện trình tự.
Rõ ràng đây không phải là ví dụ duy nhất có thể. Điều gì về '(lặp lại 1000 x)'? '(dải 100)'? Có nhiều loại trình tự lười biếng * có thể * biết chiều dài của chúng, nhưng không có nó được lập trình đơn giản bởi vì nó sẽ mất thời gian kỹ thuật và có thời gian chạy trên một lợi thế có thể nhỏ. – amalloy
@amalloy đó là lý do tại sao tôi nói "tôi có thể nghĩ đến", có lẽ tôi nên thêm "bây giờ" ở cuối :) Vẫn phần còn lại của câu trả lời giữ - chiều dài của chuỗi lười biếng được biết trước khi tạo ra nó để không có thực sự đạt được trong khéo léo thực hiện chiều dài trong chuỗi chính nó. – soulcheck
Điều này có nghĩa là không thể đếm mà không nhận ra một chuỗi lười biếng là kết quả của một 'bộ lọc'? Nói một số phần tử ngẫu nhiên của một vài triệu số ngẫu nhiên: '(- >> my-rand-int-lazy-seq (bộ lọC# (thậm chí?%)) (Đếm-không-thực hiện))'? – adamneilson