Does 'concat' break the laziness of 'line-seq'?
以下代码似乎强制
1 2 3 4 5 6 7 8 9 10 11 | (defn char-seq [rdr] (let [coll (line-seq rdr)] (apply concat (map (fn [x] (println \\,) x) coll)))) (def tmp (char-seq (clojure.contrib.io/reader file))) ;, ;, ;, ;, #'user/tmp |
您看到的部分原因是
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | user=> (defn foo [& args] nil) #'user/foo user=> (def bar (apply foo (iterate #(let [i (inc %)] (println i) i) 0))) 1 #'user/bar user=> (defn foo [x & args] nil) #'user/foo user=> (def bar (apply foo (iterate #(let [i (inc %)] (println i) i) 0))) 1 2 #'user/bar user=> (defn foo [x y & args] nil) #'user/foo user=> (def bar (apply foo (iterate #(let [i (inc %)] (println i) i) 0))) 1 2 3 #'user/bar |