在另一个lisp文件中调用函数

tra*_*ala 0 lisp emacs load common-lisp

我必须用Lisp写一个游戏.为了说清楚,我想将代码拆分为不同的.lisp文件.

如何从另一个文件中的函数调用函数?

例如,file1.lisp有一个名为function1的函数,file2.lisp有一个名为function2的函数.如何从function1中调用function2?

谢谢!

Pau*_*han 5

您知道,有各种不同的Lisp系统.我将发布Common Lisp的答案.

天真的方式是使用(load "filename.lisp"),但一段时间后,这并没有真正起作用.因此...

Common Lisp有一个名为"ASDF"的库,它处理打包和文件管理.ASDF有一些设置.

  1. 创建ASDF查找文件的目录.
  2. 将此信息添加到我的Lisp系统的init文件中.

我在我的.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的代码,这是我的一个项目.您可以将其用作模板.