2011-03-27 84 views
17

Lisp有沒有一種方法可以包含來自其他Lisp文件的代碼?Lisp導入/加載文件

例如,在C++中我可以這樣做:

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

而且在Python,

import antigravity 
import my_module 
etc... 

有一個Lisp等價?

回答

10

除了雷納的回答是:

如果要加載ASDF -systems,用途:

(asdf:load-system 'my-system) 

一些Lisp實現(CCL爲例)也允許使用require加載ASDF系統,但該功能依賴於實現。如果您正在使用Slime,並且希望以交互方式加載系統,則可以通過在Slime REPL中輸入,l my-system來完成。

我想指出的另一件事是,與Python不同,在CL中使用requireload與包沒有任何關係(認爲是「namespaces」)。因此,如果您正在加載的代碼或需要使用自己的軟件包的代碼,則您必須使用符合條件的導出符號(foo:bar),或者將代碼中所包含的軟件包包含在代碼中((defpackage my-package (:use cl package-you-want-to-use ...) ...))。這不僅僅與Python import不同,也來自C預處理器#include,後者僅僅是文本包含。

16

使用標準功能,如LOADCOMPILE-FILE

ANSI Common Lisp也有一個函數REQUIRE。

如果您使用'系統'維護工具作爲Common Lisp的擴展,那麼您還可以加載或編譯整個'系統'。 「系統」是定義了諸如加載和編譯等操作的文件和子系統的集合。