Захват cl-fad: вывод каталога ходьбы для поиска файлов - PullRequest
3 голосов
/ 07 октября 2010

Я боролся с этим часами, я пытаюсь написать функцию поиска файла, похожую на команду unix.Короче говоря, все сводится к тому, что я не могу понять, почему я не могу вернуть правильное значение из функции cl-fad: walk-directory в виде списка (cl-fad здесь http://weitz.de/cl-fad/).

попробуйте что-то вроде этого:

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

Но получите '; No value' из REPL. Однако ниже подставляется 'format nil' ...

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

Распечатывает все файлыв моем / tmp / каталоге (и ниже) для STDOUT. Однако я не смог собрать этот вывод в список.

Я пробовал ниже, но безуспешно.

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

1 Ответ

4 голосов
/ 07 октября 2010

Функция ходьбы не собирает возвращаемые значения, как mapcar, она просто применяется. Вам нужно будет сохранить результат где-нибудь самостоятельно, возможно, добавив его в глобальный список или стек.

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

Обратите внимание, что строка имен преобразуется из объектов пути в просто имя файла.

...