clojure中的递归(doall)

clojure中的递归(doall),clojure,lazy-evaluation,Clojure,Lazy Evaluation,我有一些从文件中读取的嵌套惰性序列结构。当我进行测试时,我希望能够将它们封装在doall的递归版本中,以确保在文件关闭之前从文件中提取所有数据 (defn doall-recur [s] (if (seq? s) (doall (map doall-recur s)) s)) (use 'clojure.contrib.duck-streams) (with-open [r1 (reader "test1.txt")

我有一些从文件中读取的嵌套惰性序列结构。当我进行测试时,我希望能够将它们封装在doall的递归版本中,以确保在文件关闭之前从文件中提取所有数据

(defn doall-recur [s]
  (if (seq? s)
    (doall (map doall-recur
                s))
    s))

(use 'clojure.contrib.duck-streams)
(with-open [r1 (reader "test1.txt")
            r2 (reader "test2.txt")]
  (doall-recur (list (line-seq r2) (line-seq r1))))
输出:

(("This is test2.txt" "") ("This is test1.txt" ""))

这在单元测试中对我有效

(use 'clojure.walk)
(postwalk identity nested-lazy-thing)

我们是否应该假设
s
需要引用
doall*
将要应用的代码版本?否。你为什么这么认为?
(use 'clojure.walk)
(postwalk identity nested-lazy-thing)