以下代码似乎强制line-seq
从file
读取4行。这是某种缓冲机制吗?我需要在这里使用lazy-cat
吗?如果是这样,我如何apply
一个宏到一个序列,好像它是可变参数?
(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
答案 0 :(得分:3)
您所看到的部分内容归因于apply
,因为它需要实现函数定义所需的尽可能多的args。 E.g:
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