在clojure中递归(doall)

时间:2009-08-01 18:03:41

标签: clojure lazy-evaluation

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

3 个答案:

答案 0 :(得分:5)

(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" ""))

答案 1 :(得分:5)

(defn doall* [s] (dorun (tree-seq seq? seq s)) s)

答案 2 :(得分:0)

这在单元测试中对我有用

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