2010-10-07 4 views
2

J'ai lutté avec cela pendant des heures J'essaie d'écrire une fonction de recherche de fichier similaire à la commande unix. Le plus long et le plus court se résume à ne pas comprendre pourquoi je ne peux pas renvoyer une valeur correcte de la fonction cl-fad: walk-directory comme une liste (cl-fad est ici http://weitz.de/cl-fad/).capture cl-fad: sortie répertoire-walk pour trouver des fichiers

J'essaie quelque chose comme ceci:

(cl-fad:walk-directory "/tmp/" #'(lambda (file) (format nil "~a" file)))) 

Mais get « ; Aucune valeur "du REPL. Toutefois, le « néant format » ci-dessous ...

substitution
(cl-fad:walk-directory "/tmp/" #'(lambda (file) (format t "~a" file))) 

Imprime tous les fichiers dans mon répertoire/tmp/(et ci-dessous) à STDOUT. Cependant, je n'ai pas été en mesure de collecter cette sortie dans une liste.

J'ai essayé ci-dessous sans succès.

(loop for f in (cl-fad:walk-directory 
       "/tmp/" 
       #'(lambda (file) (format t "~a" file))) 
    collect (list f))) 

Répondre

3

La fonction de marche ne collecte pas les valeurs de retour comme mapcar, elle s'applique uniquement. Vous devrez sauvegarder la sortie vous-même quelque part, en l'ajoutant peut-être à une liste ou une pile globale.

(let (files) 
     (cl-fad:walk-directory "/tmp/" #'(lambda (x) (push (namestring x) files))) 
     files) 

Notez que la chaîne de noms est convertie à partir d'un objet chemin en un nom de fichier.

Questions connexes