2009-08-01 31 views
6

Tengo algunas estructuras con secuencias perezosas anidadas que leen de los archivos. Cuando estoy probando, me gustaría poder envolverlos en una versión recursiva de doall para asegurarme de que todos los datos se extraen de los archivos antes de y se cierran los archivos.recursivo (doall) en clojure

Respuesta

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

Salida:

(("This is test2.txt" "") ("This is test1.txt" "")) 
5
(defn doall* [s] (dorun (tree-seq seq? seq s)) s) 
+0

debemos suponer 's' tiene que ser una versión del citado código al cual 'doall *' se aplicará? – matanster

+0

No. ¿Por qué piensas eso? – cgrand

0

Esto funcionó para mí en una prueba de unidad

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