我在两个独立的文件中编写了两个函数,假设是文件A.lisp和B.lisp,其中两个文件都有一些用于测试的主程序代码,而A.lisp会调用B.lisp中的函数.这意味着load直接在A.lisp中使用该方法将执行B.lisp中的主代码,这不应该发生.在我看来,这些文件太小,无法考虑使用像包这样的东西.
if __name__ == "__main__":在Common Lisp中有类似Python的东西吗?只有当前文件是主模块(即正在运行的程序)时才会执行包含在此条件中的顶级代码,但如果它作为库导入则不会执行.
包只是符号的名称空间.他们没有说任何关于加载或编译代码的事情.
Common Lisp在ANSI Common Lisp标准中没有库,模块或类似"主"模块/例程的想法.该标准定义了两个例程PROVIDE和REQUIRE.但那些没有明确说明.
大多数应用程序和库使用"系统"工具来构造,指定,编译和加载代码.
有一个叫做ASDF的'免费' .'另一个系统定义工具'.对于大多数类型的应用程序,像ASDF这样的工具很有用.对于原始应用程序,您可以使用COMPILE-FILE和等标准函数编写自己的工具LOAD.
尼克莱文为ASDF编写了一个教程(他遗弃的Lisp书籍项目的一部分):系统.
一些Lisp实现具有更广泛的工具来创建应用程序(例如使用Clozure Common Lisp编写的Mac OS X应用程序).