J'essaie de parcourir un répertoire donné et de créer une liste de fichiers se terminant par .jpg.Traverser une arborescence de répertoires
(setq files (list))
(defun jpg-list(directory)
(dolist (node (directory-files directory t))
(if (file-directory-p node)
(if (not
(string= (substring node (- (string-width node) 1)) "."))
(jpg-list node))
(if (string-match ".jpg" node)
(setq files (cons node files)))))
files)
Je voudrais faire cela sans utiliser de variable externe (fichiers). Quelle est la manière idiomatique de le faire en elisp?
grâce, qui a résolu mon problème. Mais pour une situation différente, quelle est la manière idiomatique d'écrire ce genre de boucle? utilisant setq partout ne semble pas le code fonctionnel? –
Si vous voulez une approche plus 'fonctionnelle' vous voudrez probablement faire une mapcar sur votre (répertoire-fichiers) avec un lambda où il appelle récursivement votre fonction sur des sous-répertoires. – aaron
A droite, mapcar est plus fonctionnel, mais ne résout pas son problème. Vous auriez besoin de routines dans "cl" comme "remove-if", "remove", etc. Tout dépend de ce que vous faites. La manière idiomatique est d'utiliser '' directory-files' dans toute son étendue. La prochaine façon (avec un minimum de changement de code) est d'utiliser une variable locale via 'let', vous pouvez écrire une routine récursive, utiliser des fonctions '' cl', etc., etc. etc. Remarque: Emacs n'est pas fonctionnel, c'est plein de toutes sortes d'effets secondaires ... –