11
무한한 lazy seqs of randoms를 생성하는 거의 동일한 프로그램 2 개. 첫 번째 충돌이 발생하지 않습니다. 두 번째 충돌은 OutOfMemoryError 예외입니다. 왜?Clojure : 게으른 마법
;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))
는하지만 꽤 빨리 다음 충돌 :
;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)
저는 초보자입니다. 그러나 당신의 설명은 매우 정확합니다. 네가 나를 때리지 않았다면 나는 똑같은 대답을했을 것이다! 그리고 6 명의 승자가 당신과 동의하는 것 같습니다. –
Clojure에서 Project Euler 문제를 잠시 쉬기 시작했을 때, 무한한 지연 시퀀스에 대한 디버그 인쇄물로 인해 프로그램이 느려지 게되었습니다. 무한한 게으른 시퀀스는 Clojure의 중요한 개념으로 이해할 수 있습니다. –
BTW, 어떻게 StackOverflow 없습니다. inf-rand에는 무한 재귀가 있습니다. – GabiMe