tra*_*ala 0 lisp emacs load common-lisp
我必须用Lisp写一个游戏.为了说清楚,我想将代码拆分为不同的.lisp文件.
如何从另一个文件中的函数调用函数?
例如,file1.lisp有一个名为function1的函数,file2.lisp有一个名为function2的函数.如何从function1中调用function2?
谢谢!
您知道,有各种不同的Lisp系统.我将发布Common Lisp的答案.
天真的方式是使用(load "filename.lisp"),但一段时间后,这并没有真正起作用.因此...
Common Lisp有一个名为"ASDF"的库,它处理打包和文件管理.ASDF有一些设置.
我在我的.sbclrc文件中使用它(假设我在〜中创建了一个.asdf文件):
(pushnew "~/.asdf/" asdf:*central-registry* :test #'equal)
Run Code Online (Sandbox Code Playgroud)
我通常使用以前构建的ASDF文件然后修改它.
这是ASDF文件的示例内容:
(asdf:defsystem #:cl-linq
:depends-on ( #:alexandria #:anaphora)
:components ((:file "cl-linq"))
:name "cl-linq"
:version "0.1"
:maintainer "Paul Nathan"
:author "Paul Nathan"
:licence "LLGPL"
:description "CL LINQ style interface with strains of SQL"
:long-description
"DSL for managing and querying datasets in a SQL/LINQ style
syntax. cl-linq provides a simple and usable set of primitives to
make data examination straightforward. ")
Run Code Online (Sandbox Code Playgroud)
我将此代码放在cl-linq.asd源代码旁边的文件中(cl-linq.lisp 来自"cl-linq"defsystem中的组件),然后将cl-linq.asd文件符号链接到我的~/.asdf/目录.
在我的cl-linq.lisp文件中,我包括:
(defpackage :cl-linq
(:use
:common-lisp
:anaphora)
(:export
#:query
#:cl-linq-select))
(in-package :cl-linq)
Run Code Online (Sandbox Code Playgroud)
所以对于你的情况,我会有2个组件; 每个都有自己的defpackage形式,导出功能,而另一个包需要.
对于这些例子,我采用了CL-LINQ的代码,这是我的一个项目.您可以将其用作模板.