Hầu như 2 chương trình giống hệt nhau để tạo ra những hạn chế lười biếng vô hạn. Đầu tiên không bị hỏng. Tai nạn thứ hai với ngoại lệ OutOfMemoryError. Tại sao?Clojure: ma thuật lười biếng
;Return infinite lazy sequence of random numbers
(defn inf-rand[] (lazy-seq (cons (rand) (inf-rand))))
;Never returns. Burns the CPU but won't crash and lives forever.
(last (inf-rand))
Nhưng sự sụp đổ sau khá nhanh chóng:
;Return infinite lazy sequence of random numbers
(defn inf-rand[] (lazy-seq (cons (rand) (inf-rand))))
(def r1 (inf-rand))
;Crash with "OutOfMemoryError"
(last r1)
Tôi cũng là người mới bắt đầu, nhưng lời giải thích của bạn trông rất chính xác. Tôi sẽ trả lời điều tương tự nếu bạn không đánh tôi với nó! Và 6 người tán thành dường như đồng ý với bạn. –
Khi tôi bắt đầu thực hiện các vấn đề Dự án Euler trong Clojure một lúc trở lại, bản in gỡ lỗi của tôi trên các chuỗi lười vô hạn làm chậm các chương trình của tôi xuống ... vô hạn. Chuỗi vô hạn lười biếng là một khái niệm quan trọng của Clojure để hiểu thấu. –
BTW, cách không có StackOverflow. Có một đệ quy vô hạn trong inf-rand – GabiMe