Lisp中是否有一种方法可以包含其他Lisp文件中的代码?
例如,在C ++中我可以这样做:
#include <iostream>
#include <string>
#include "myfile.h"
etc...
在Python中,
import antigravity
import my_module
etc...
是否有Lisp等价物?
答案 0 :(得分:16)
使用LOAD和COMPILE-FILE等标准函数。
ANSI Common Lisp也有一个函数REQUIRE。
如果您使用'系统'维护工具作为Common Lisp的扩展,那么您也可以加载或编译整个'系统'。 “系统”是文件和子系统的集合,其中定义了加载和编译等操作。
答案 1 :(得分:10)
除了Rainer的回答:
如果您要加载ASDF - 系统,请使用:
(asdf:load-system 'my-system)
一些Lisp实现(例如CCL)也允许使用require
来加载ASDF系统,但该功能依赖于实现。如果您正在使用Slime,并希望以交互方式加载系统,则可以通过在Slime REPL中键入,l my-system
来执行此操作。
我想指出的另一件事是,与Python不同,在CL中使用require
或load
与包没有任何关系(想想“命名空间”)。因此,如果您要加载或要求的代码存在于自己的包中,您将必须使用其导出的符号限定(foo:bar
),或者将这些包包含在您的代码所在的包中({{1} })。这不仅与Python (defpackage my-package (:use cl package-you-want-to-use ...) ...)
不同,而且与C预处理器import
不同,后者仅仅是文本内容。