捕获cl-fad:用于查找文件的walk-directory输出

时间:2010-10-07 04:30:53

标签: lisp common-lisp

我已经打了好几个小时,我正在尝试编写类似于unix命令的查找文件函数。它的长短归结为不理解为什么我不能从cl-fad中返回一个正确的值:walk-directory函数作为列表(cl-fad在这里http://weitz.de/cl-fad/)。

我正在尝试这样的事情:

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

但得到';没有来自REPL的价值。但是,以下代替'格式为零'......

(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 个答案:

答案 0 :(得分:3)

walk函数不会收集mapcar之类的返回值,它只是适用。您需要在某处保存输出,可能附加到全局列表或堆栈。

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

请注意,namestring从路径对象转换为文件名。