Fast 2 identische Programme, um unendliche Lazy Seqs von Randoms zu generieren. Der erste stürzt nicht ab. Der zweite Absturz mit OutOfMemoryError-Ausnahme. Warum?Clojure: faule Magie
;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))
Aber der folgende Crash ziemlich schnell:
;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)
Ich bin auch ein Anfänger, aber Ihre Erklärung sieht sehr korrekt aus. Ich hätte dasselbe geantwortet, wenn du mich nicht dazu geschlagen hättest! Und 6 Hochwähler scheinen Ihnen zuzustimmen. –
Als ich vor einiger Zeit damit begonnen habe, Probleme mit dem Projekt Euler in Clojure zu lösen, haben meine Debug-Prints auf unendlich faulen Sequenzen meine Programme verlangsamt ... unendlich. Unendliche Lazy-Sequenzen sind ein wichtiges Clojure-Konzept, mit dem man sich auseinandersetzen muss. –
BTW, wie kommt es, dass es keinen StackOverflow gibt. Es gibt eine unendliche Rekursion in inf-rand – GabiMe