Lisp导入/加载文件

wro*_*ame 19 lisp import file

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

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

#include <iostream>
#include <string>
#include "myfile.h"
etc...
Run Code Online (Sandbox Code Playgroud)

在Python中,

import antigravity
import my_module
etc...
Run Code Online (Sandbox Code Playgroud)

是否有Lisp等价物?

Rai*_*wig 17

使用LOADCOMPILE-FILE等标准函数.

ANSI Common Lisp还具有REQUIRE函数.

如果您使用"系统"维护工具作为Common Lisp的扩展,那么您还可以加载或编译整个"系统"."系统"是文件和子系统的集合,其中定义了加载和编译等操作.


dan*_*lei 11

除了Rainer的回答:

如果要加载ASDF -systems,使用方法:

(asdf:load-system 'my-system)
Run Code Online (Sandbox Code Playgroud)

一些Lisp实现(例如CCL)也允许require用于加载ASDF系统,但该功能依赖于实现.如果您正在使用Slime,并希望以交互方式加载系统,则可以通过键入,l my-systemSlime REPL来执行此操作.

我想要指出的另一件事是,与Python不同,使用requireload在CL中与包没有任何关系(想想"命名空间").所以,如果你的代码加载或要求在自己的软件包的生活,你将不得不使用其出口资格的符号(foo:bar),或包括那些包在你的代码住在包((defpackage my-package (:use cl package-you-want-to-use ...) ...)).这不仅与Python不同import,而且与C预处理器不同#include,后者仅仅是文本内容.