4

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

(directory "*") ;列出一些文件,而不是全部 (directory " MyFile ") ;列出一些文件,但同样,按扩展名过滤

在我看来被忽略的扩展......至少 *.lisp 没有列出。

Fedora18 上的 SBCL 1.1.2-1.fc18

4

3 回答 3

5

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

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

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

但是如果你只想列出目录中的所有文件,你可以使用cl-fad function list-directory

于 2013-07-21T17:31:51.920 回答
4

从 glob 到路径名的转换取决于实现和系统。路径名区分文件名文件类型(扩展名)。当您指定 just*时,Linux 上的 SBCL 将其解释为“任何文件名,但扩展名必须为空”。你可以说*.*指定所有文件。.in被解释为文件名和扩展名之间的*.*分隔,因此不仅*.*意味着包含文字点的文件名。

于 2013-07-21T20:23:00.697 回答
2

Lisp 使用路径,它们调用*.XXX文件的类型。(directory "*")正在过滤一些“类型”(我还是不明白),但 freenode.net IRC 用户 pjb 指出

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

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

于 2013-07-21T00:55:22.970 回答