eintr: Several files recursively

 
 14.8 Recursively 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 22.1.1; files from other versions of Emacs may
 produce different results.)
 
      (cd "/usr/local/share/emacs/22.1.1/")
 
      (lengths-list-file "./lisp/macros.el")
           ⇒ (283 263 480 90)
 
      (lengths-list-file "./lisp/mail/mailalias.el")
           ⇒ (38 32 29 95 178 180 321 218 324)
 
      (lengths-list-file "./lisp/makesum.el")
           ⇒ (85 181)
 
        (recursive-lengths-list-many-files
         '("./lisp/macros.el"
           "./lisp/mail/mailalias.el"
           "./lisp/makesum.el"))
             ⇒ (283 263 480 90 38 32 29 95 178 180 321 218 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.