title: Recursive lazy seq in Clojure
body: <p>I can't understand why this lazy-seq causes a stackoverflow, and why not when you pass the sequence to dorun:</p>
  
  <pre><code>(defn very-lazy [s]
      (lazy-seq
     (if (seq s)
       [(first s) (very-lazy (rest s))]
       [])))
  
  (dorun (very-lazy (range 200000000)))
  &gt;nil
  
  (take 2 (very-lazy (range 20000000))
  &gt;...(1577 (java.lang.StackOverflowError
  </code></pre>
  
  <p>If it's lazy then <code>take 2</code> should cause the lazy seq to iterate only two times, why doesn't happen and why dorun works?</p>