3

有没有办法让 asdf 加载目录中的所有文件 (*.lisp) 而无需在我的 .asd 文件中全部命名它们?在目录或文件名规范中使用通配符不起作用。有人可以帮忙吗?

4

3 回答 3

3

See DIRECTORY:

 CL-USER> (directory "*.lisp")
 => ("a.lisp"
     "b.lisp"
     ...)

Then, call LOAD for each file.

But then, you could also do:

CL-USER> (loop for f in * collect `(:file ,(pathname-name f)))
((:file "a") (:file "b"))

Then, you can copy that in your .asd file, so that your dependencies are a little more explicit.

于 2019-01-17T17:01:30.910 回答
3

您可以使用 ASDF 的“包推断系统”扩展:https ://common-lisp.net/project/asdf/asdf/The-package_002dinferred_002dsystem-extension.html#The-package_002dinferred_002dsystem-extension 。为此,您必须遵守目录和文件命名约定,但它(表面上)更接近于其他语言中此类事物的组织方式。

不过,我不得不承认我更喜欢 asd 文件中的显式布局,因为它清楚地将系统、包和文件的概念分开。

于 2019-01-17T19:06:13.560 回答
1

asdf 存储库附带一个 asdf/contrib/wild-modules.lisp 扩展,可以按照您说的做。我仍然会改用 package-inferred-system 。

于 2019-01-22T00:01:17.793 回答