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

标签 emacs load lisp common-lisp

我必须用 Lisp 编写游戏。为了清楚起见,我想将代码拆分到不同的 .lisp 文件中。

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

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

谢谢!

最佳答案

如你所知,有多种不同的 Lisp 系统。我将发布 Common Lisp 的答案。

最朴素的方法是使用(load "filename.lisp"),但一段时间后效果并不好。因此……

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

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

我在我的 .sbclrc 文件中使用它(假设我在 ~ 中创建了一个 .asdf 文件):

(pushnew "~/.asdf/" asdf:*central-registry* :test #'equal)

我通常使用以前构建的 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. ")

我将这段代码放在我的源代码旁边的文件 cl-linq.asd 中(cl-linq.lisp 来自组件 "cl-linq " 在 defsystem 中),然后将 cl-linq.asd 文件符号链接(symbolic link)到我的 ~/.asdf/ 目录。

在我的 cl-linq.lisp 文件中,我包含了这个:

(defpackage :cl-linq
  (:use
   :common-lisp
   :anaphora)
  (:export
   #:query
   #:cl-linq-select))
(in-package :cl-linq)

所以对于你的情况,我有两个组成部分;每个都有自己的 defpackage 形式,导出其他包需要的功能。

对于示例,我从 CL-LINQ 中获取了代码,我的一个项目。您可以很自由地将其用作模板。

关于emacs - 在另一个 lisp 文件中调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19731546/

相关文章:

unix - 永恒颜色 : Unknown terminal type

recursion - 将 Y-Combinator 应用于 Clojure 中具有两个参数的递归函数?

emacs - 如何在 emacs 中打开多个迷你缓冲区?

emacs - 如何在 2 个窗口 emacs 中交换缓冲区

testing - 亚马逊 EC2 负载测试

cocoa - 使用 Mac 应用程序保存文件 - 文件扩展名

java - 如何在java中加载合成风格

compilation - 评估-何时使用?

performance - 在 Common Lisp 中,函数和宏之间有性能差异吗?

plugins - emacs 中的 Command-T