Lisp有沒有一種方法可以包含來自其他Lisp文件的代碼?Lisp導入/加載文件
例如,在C++中我可以這樣做:
#include <iostream>
#include <string>
#include "myfile.h"
etc...
而且在Python,
import antigravity
import my_module
etc...
有一個Lisp等價?
Lisp有沒有一種方法可以包含來自其他Lisp文件的代碼?Lisp導入/加載文件
例如,在C++中我可以這樣做:
#include <iostream>
#include <string>
#include "myfile.h"
etc...
而且在Python,
import antigravity
import my_module
etc...
有一個Lisp等價?
除了雷納的回答是:
如果要加載ASDF -systems,用途:
(asdf:load-system 'my-system)
一些Lisp實現(CCL爲例)也允許使用require
加載ASDF系統,但該功能依賴於實現。如果您正在使用Slime,並且希望以交互方式加載系統,則可以通過在Slime REPL中輸入,l my-system
來完成。
我想指出的另一件事是,與Python不同,在CL中使用require
或load
與包沒有任何關係(認爲是「namespaces」)。因此,如果您正在加載的代碼或需要使用自己的軟件包的代碼,則您必須使用符合條件的導出符號(foo:bar
),或者將代碼中所包含的軟件包包含在代碼中((defpackage my-package (:use cl package-you-want-to-use ...) ...)
)。這不僅僅與Python import
不同,也來自C預處理器#include
,後者僅僅是文本包含。
使用標準功能,如LOAD和COMPILE-FILE。
ANSI Common Lisp也有一個函數REQUIRE。
如果您使用'系統'維護工具作爲Common Lisp的擴展,那麼您還可以加載或編譯整個'系統'。 「系統」是定義了諸如加載和編譯等操作的文件和子系統的集合。