Guest User

Clojure stack overflow

a guest
May 11th, 2012
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. (require '[clojure.java.io :as io])
  2.  
  3. ;; Will reproduce stack overflow if this file has >= 10000 lines.
  4. (def input-file "/home/xgp/tmp/def")
  5.  
  6. (defn make-reader [input]
  7.   (if (string? input)
  8.     (io/reader input)
  9.     (first input)))
  10.  
  11. (defn read-line-or-nil [input]
  12.   (let [reader (make-reader input)]
  13.     (if-let [lines (seq (line-seq reader))]
  14.       [reader lines]
  15.       (do (. reader close)
  16.           nil))))
  17.  
  18. (defn read-inputs [inputs]
  19.   (keep read-line-or-nil inputs))
  20.  
  21. (let [inputs (atom [input-file])]
  22.   (loop []
  23.     (swap! inputs read-inputs)
  24.     (when-let [sq (seq @inputs)]
  25.       (let [[[_ [line]]] sq]
  26.         (println line)
  27.         (recur)))))
Advertisement
Add Comment
Please, Sign In to add comment