2009-08-01 13 views
6

Ho alcune strutture con sequenze pigro nidificate che leggono dai file. Quando sto testando mi piacerebbe essere in grado di avvolgerli in una versione ricorsiva di doall per essere sicuri che tutti i dati vengano estratti dai file prima del i file vengano chiusi.ricorsivo (doall) in clojure

risposta

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

uscita:

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

Dovremmo assumere 's' ha bisogno di essere una versione citata del codice a cui si applica 'doall *'? – matanster

+0

No. Perché pensi così? – cgrand

0

questo ha lavorato per me in una prova di unità

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