Lisp导入/加载文件

时间:2011-03-27 03:49:41

标签: file import lisp

Lisp中是否有一种方法可以包含其他Lisp文件中的代码?

例如,在C ++中我可以这样做:

#include <iostream>
#include <string>
#include "myfile.h"
etc...

在Python中,

import antigravity
import my_module
etc...

是否有Lisp等价物?

2 个答案:

答案 0 :(得分:16)

使用LOADCOMPILE-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中使用requireload与包没有任何关系(想想“命名空间”)。因此,如果您要加载或要求的代码存在于自己的包中,您将必须使用其导出的符号限定(foo:bar),或者将这些包包含在您的代码所在的包中({{1} })。这不仅与Python (defpackage my-package (:use cl package-you-want-to-use ...) ...)不同,而且与C预处理器import不同,后者仅仅是文本内容。