Copyright (C) 2000-2012 |
GNU Info (emacs-lisp-intro.info)Several files recursivelyRecursively Count Words in Different Files ========================================== Besides a `while' loop, you can work on each of a list of files with recursion. A recursive version of `lengths-list-many-files' is short and simple. The recursive function has the usual parts: the `do-again-test', the `next-step-expression', and the recursive call. The `do-again-test' determines whether the function should call itself again, which it will do if the `list-of-files' contains any remaining elements; the `next-step-expression' resets the `list-of-files' to the CDR of itself, so eventually the list will be empty; and the recursive call calls itself on the shorter list. The complete function is shorter than this description! (defun recursive-lengths-list-many-files (list-of-files) "Return list of lengths of each defun in LIST-OF-FILES." (if list-of-files ; do-again-test (append (lengths-list-file (expand-file-name (car list-of-files))) (recursive-lengths-list-many-files (cdr list-of-files))))) In a sentence, the function returns the lengths' list for the first of the `list-of-files' appended to the result of calling itself on the rest of the `list-of-files'. Here is a test of `recursive-lengths-list-many-files', along with the results of running `lengths-list-file' on each of the files individually. Install `recursive-lengths-list-many-files' and `lengths-list-file', if necessary, and then evaluate the following expressions. You may need to change the files' pathnames; those here work when this Info file and the Emacs sources are located in their customary places. To change the expressions, copy them to the `*scratch*' buffer, edit them, and then evaluate them. The results are shown after the `=>'. (These results are for files from Emacs Version 21.0.100; files from other versions of Emacs may produce different results.) (cd "/usr/local/share/emacs/21.0.100/") (lengths-list-file "./lisp/macros.el") => (273 263 456 90) (lengths-list-file "./lisp/mail/mailalias.el") => (38 32 26 77 174 180 321 198 324) (lengths-list-file "./lisp/makesum.el") => (85 181) (recursive-lengths-list-many-files '("./lisp/macros.el" "./lisp/mail/mailalias.el" "./lisp/makesum.el")) => (273 263 456 90 38 32 26 77 174 180 321 198 324 85 181) The `recursive-lengths-list-many-files' function produces the output we want. The next step is to prepare the data in the list for display in a graph. automatically generated by info2www version 1.2.2.9 |