SBCL(目录“*”)正在根据扩展名过滤掉一些文件名。我如何让它返回所有文件,尤其是所有匹配模式的文件(如在 bash globing 中)
(directory "*") ;列出一些文件,而不是全部 (directory " MyFile ") ;列出一些文件,但同样,按扩展名过滤
在我看来被忽略的扩展......至少 *.lisp 没有列出。
Fedora18 上的 SBCL 1.1.2-1.fc18
SBCL(目录“*”)正在根据扩展名过滤掉一些文件名。我如何让它返回所有文件,尤其是所有匹配模式的文件(如在 bash globing 中)
(directory "*") ;列出一些文件,而不是全部 (directory " MyFile ") ;列出一些文件,但同样,按扩展名过滤
在我看来被忽略的扩展......至少 *.lisp 没有列出。
Fedora18 上的 SBCL 1.1.2-1.fc18
可能你应该使用原生形式:
(directory (make-pathname :name :wild :type :wild))
因为所有这些奇怪的迹象*?.*
都不会增加代码的可理解性。Lisp 不应该是单行语言。:)
但是如果你只想列出目录中的所有文件,你可以使用cl-fad function list-directory
。
从 glob 到路径名的转换取决于实现和系统。路径名区分文件名和文件类型(扩展名)。当您指定 just*
时,Linux 上的 SBCL 将其解释为“任何文件名,但扩展名必须为空”。你可以说*.*
指定所有文件。.
in被解释为文件名和扩展名之间的*.*
分隔,因此不仅*.*
意味着包含文字点的文件名。
Lisp 使用路径,它们调用*.XXX
文件的类型。(directory "*")
正在过滤一些“类型”(我还是不明白),但 freenode.net IRC 用户 pjb 指出
(concatenate 'list (directory "*.*") (directory "*") (directory "*/"))
这样会更好。(仍然不完美,但可以通过并指向正确的方向。)