sbcl(目录“*”)没有返回所有文件(例如缺少* .lisp)

时间:2013-07-20 18:48:53

标签: lisp common-lisp sbcl

SBCL(目录“*”)根据扩展名过滤掉一些文件名。 如何让它返回所有文件,特别是所有匹配模式的文件(如bash globing)

(目录“*”);列出一些文件,而不是全部 (目录“ MyFile ”);列出一些文件,但再次按扩展名过滤

我似乎忽略了扩展......至少* .lisp未列出。

Fedora18上的SBCL 1.1.2-1.fc18

3 个答案:

答案 0 :(得分:4)

可能你应该使用原生形式:

(directory (make-pathname :name :wild :type :wild))

因为所有这些奇怪的符号*?.*都不会增加代码的可理解性。 Lisp不应该是单行语言。 :)

但如果您只想列出目录中的所有文件,则可以使用cl-fad函数list-directory

答案 1 :(得分:2)

从globs到路径名的转换是实现和系统相关的。路径名区分文件名文件类型(扩展名)。当您仅指定*时,Linux上的SBCL将其解释为“任何文件名,但扩展名必须为空”。您可以说*.*指定所有文件。 .中的*.*被解释为文件名和扩展名之间的分隔,因此*.*表示只是包含文字点的文件名。

答案 2 :(得分:1)

Lisp使用路径,并将 .XXX称为文件类型。 (目录“”)正在过滤一些“类型”(我仍然不理解这一切), 但freenode.net IRC用户pjb指出

(concatenate 'list (directory "*.*") (directory "*")  (directory "*/"))

这样做会更好。 (仍然不完美,但可以通过并指向正确的方向)