如何使用lisp(clisp)制作和使用库?
在C/C++中,我可以创建一个库,并使用源代码中的#include“”和链接时的-labc使其成为静态库或dll。 如何在lisp中具有相同的功能 作为目录A中util.lisp的一个示例,我定义了一个库函数hello (defpackage "UTIL" (:use "COMMON-LISP") (:nicknames "UT") (:export "HELLO")) (in-package util) (defun hello () (format t "hello, world")) (defpackage“UTIL” (:使用“COMMON-LISP”) (:昵称“UT”) (:导出“HELLO”)) (在包util中) (德芬你好() (格式t“你好,世界”)) 并尝试从main函数使用此库函数 (defun main () (ut:hello)) (main) (德芬大街) (ut:你好) (主要) 我试过了 clisp main.lisp A/util.lisp clisp main.lisp A/util.lisp 但是,我得到了以下信息 *** - READ from #: there is no package with name "UT" ***-从#读取:没有名为“UT”的包如何使用lisp(clisp)制作和使用库?,lisp,common-lisp,clisp,Lisp,Common Lisp,Clisp,在C/C++中,我可以创建一个库,并使用源代码中的#include“”和链接时的-labc使其成为静态库或dll。 如何在lisp中具有相同的功能 作为目录A中util.lisp的一个示例,我定义了一个库函数hello (defpackage "UTIL" (:use "COMMON-LISP") (:nicknames "UT") (:export "HELLO")) (in-package util) (defun hello () (format t "hello, wo
- 使用图书馆的“包含”等同于什么
- 加载库的-lutil等效于什么?clisp/sbcl使用库的命令行是什么
- 对于defpackage,这等同于名称空间吗李>
然后运行“clisp main.lisp”可以正常工作。您必须在main.lisp之前加载util.lisp:
> (load "util.lisp")
> (load "main.lisp")
> (main)
hello, world
NIL
实用的Common Lisp有很多优点。Common Lisp是一种基于图像的语言,尽管其程度通常比Smalltalk小。这意味着您可以通过以下方式使用库:将库加载到映像中(如果显式地使用格式为
(load(compile file“your file here”))
),或者通常使用系统定义工具,如。加载的代码可用于将来编译/加载的所有代码
包实际上是名称空间。它们只处理字符串到符号的映射,不直接连接到文件、函数或其他任何东西。您收到了一个包错误,因为您试图在文件定义之前使用包加载文件。您要查找的是系统。Common Lisp的
defpackage
与此无关,是的,它与名称空间有关。请查看或(参见下面的Xach评论)以了解更多信息
您可以限制自己仅加载文件,但通常使用系统定义工具;主要是现在。一个简单的例子:
(defsystem my-system
:name "my-system"
:version "0.0.1"
:author "myself"
:license "LLGPL"
:description "it's a system."
:serial t
:components ((:file "packages")
(:file "stuff")
(:file "more_stuff")))
其中packages.lisp将包含包定义,stuff和其他内容是要加载的lisp或fasl文件。此系统定义(通常命名为filename.asd)必须符号链接到(或位于)asdf:*central registry*中包含的目录,asdf才能找到您的系统。然后,您可以这样加载系统:
(asdf:oos 'asdf:load-op 'my-system)
ASDF的最新版本中增加了一个替代方案:
(asdf:load-system 'my-system)
或者,当使用slime时,按下
,l my system RET
“白痴指南”部分基于不准确的CLTL1信息。HyperSpec关于软件包的章节可读性很好,而且附带的好处是它们没有对软件包系统发表不准确的尖刻评论。Xach,我读《白痴指南》已经有一段时间了,即使我不记得很多细节,我确实记得,这是其中一种解释,对我理解这个概念有很大帮助。我在相关的HyperSpec部分添加了一个链接,并在“白痴指南”链接后添加了一个指向您评论的指针,以便读者可以查看规范、准确和非正式的信息来源。ASDF链接有点不完整。我在这里写了我是如何做到这一点的: