On Wed, Oct 6, 2010 at 08:49, Abraham <vincent....@gmail.com> wrote: > Dear All , > > I wanted to list the files of a folder , if a folder within , then it > should list the files of that folder and so on.. ie recursively list > files of folders > > I tried with recur & loop and could not do it . Then i searched the > internet for the code , i got the code , but i am not able to > understand it , what is -> for ? > following is the code . > > -> is a macro. It rewrites the code it's invoked on before it is compiled:
(-> dirpath File. file-seq) becomes: (file-seq (File. dirpath)) You can think of -> threading its first argument through a list of functions. So we give dirpath to File. then we give the result of that to file-seq. > > ; prints all files > (import 'java.io.File) > (defn walk [dirpath] > (doseq [file (-> dirpath File. file-seq)] > (println (.getPath file) ))) > > This doesn't do what you said you wanted to do above: list all files, recursively. It just lists the files contained directly in dirpath. > > can anybody help to do with using recur / loop so to know how to use > recur or loop. > loop/recur allow one to describe iterative computations in a recursive style. Iterative computations don't consume stack space. Listing files recursively is a tree recursion. A tree recursion is not an iterative process. loop/recur won't help you there. You'll need to use real stack-consuming recursion. Here's an example that will produce a recursive list of all files in or below a given directory: http://gist.github.com/613279 Note, however, that the recursion is indirect, since walk calls mapcat, which calls walk again. // Ben Thanks in advance > Abraham > > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to clojure@googlegroups.com > Note that posts from new members are moderated - please be patient with > your first post. > To unsubscribe from this group, send email to > clojure+unsubscr...@googlegroups.com<clojure%2bunsubscr...@googlegroups.com> > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en